{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "461b1d52-8bb8-463f-ae34-ca7abad564b2",
   "metadata": {},
   "source": [
    "# pandas 数据分析库 - 高级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "061f151b-b697-4134-8c94-892e01a79b2f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f7e102f-4d54-4dcd-b6ce-794cbe547c8b",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据集成"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcf8ed02-f802-4ac1-abfd-e0c5c0b5ed22",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 1.concat 合并 df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ce2cc205-aa21-4e40-9536-4d77d0962903",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>34</td>\n",
       "      <td>102</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>3</td>\n",
       "      <td>78</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>71</td>\n",
       "      <td>116</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>128</td>\n",
       "      <td>62</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>83</td>\n",
       "      <td>77</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>64</td>\n",
       "      <td>1</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>119</td>\n",
       "      <td>36</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>118</td>\n",
       "      <td>52</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>20</td>\n",
       "      <td>4</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>17</td>\n",
       "      <td>48</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A       34         102     96\n",
       "B        3          78    129\n",
       "C       71         116     60\n",
       "D      128          62     67\n",
       "E       83          77    117\n",
       "F       64           1    110\n",
       "G      119          36     46\n",
       "H      118          52     31\n",
       "I       20           4     32\n",
       "J       17          48     80"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>20</td>\n",
       "      <td>14</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>126</td>\n",
       "      <td>102</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>3</td>\n",
       "      <td>43</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>48</td>\n",
       "      <td>110</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>42</td>\n",
       "      <td>91</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>96</td>\n",
       "      <td>20</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>109</td>\n",
       "      <td>141</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>4</td>\n",
       "      <td>68</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>40</td>\n",
       "      <td>24</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>21</td>\n",
       "      <td>135</td>\n",
       "      <td>134</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "K       20          14     80\n",
       "L      126         102     13\n",
       "M        3          43     24\n",
       "N       48         110     53\n",
       "O       42          91    121\n",
       "P       96          20     83\n",
       "Q      109         141    115\n",
       "R        4          68     36\n",
       "S       40          24     51\n",
       "T       21         135    134"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>9</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>49</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>68</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>14</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>30</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>129</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>138</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>37</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  English\n",
       "A       9       85\n",
       "B       4       22\n",
       "C      49        0\n",
       "D      13       56\n",
       "E      68       33\n",
       "F      14       86\n",
       "G      30       75\n",
       "H     129       67\n",
       "I     138       74\n",
       "J      37       65"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 一班的部分考试成绩\n",
    "df1 = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 二班的部分考试成绩\n",
    "df2 = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('KLMNOPQRST'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 一班的另一部分考试成绩\n",
    "df3 = pd.DataFrame(np.random.randint(0, 150, size=(10, 2)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Python', 'English'])\n",
    "\n",
    "display(df1, df2, df3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8fa0977-64ae-4558-a8f7-aea676e44589",
   "metadata": {},
   "source": [
    "**合并 df1 和 df2** ：考试科目一样，属于列索引相同的 dataframe 合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6bef5ca3-a6bd-4fa6-8aa4-e98978e083a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>34</td>\n",
       "      <td>102</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>3</td>\n",
       "      <td>78</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>71</td>\n",
       "      <td>116</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>128</td>\n",
       "      <td>62</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>83</td>\n",
       "      <td>77</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>64</td>\n",
       "      <td>1</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>119</td>\n",
       "      <td>36</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>118</td>\n",
       "      <td>52</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>20</td>\n",
       "      <td>4</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>17</td>\n",
       "      <td>48</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>20</td>\n",
       "      <td>14</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>126</td>\n",
       "      <td>102</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>3</td>\n",
       "      <td>43</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>48</td>\n",
       "      <td>110</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>42</td>\n",
       "      <td>91</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>96</td>\n",
       "      <td>20</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>109</td>\n",
       "      <td>141</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>4</td>\n",
       "      <td>68</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>40</td>\n",
       "      <td>24</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>21</td>\n",
       "      <td>135</td>\n",
       "      <td>134</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A       34         102     96\n",
       "B        3          78    129\n",
       "C       71         116     60\n",
       "D      128          62     67\n",
       "E       83          77    117\n",
       "F       64           1    110\n",
       "G      119          36     46\n",
       "H      118          52     31\n",
       "I       20           4     32\n",
       "J       17          48     80\n",
       "K       20          14     80\n",
       "L      126         102     13\n",
       "M        3          43     24\n",
       "N       48         110     53\n",
       "O       42          91    121\n",
       "P       96          20     83\n",
       "Q      109         141    115\n",
       "R        4          68     36\n",
       "S       40          24     51\n",
       "T       21         135    134"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 行合并\n",
    "pd.concat([df1, df2], axis = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "574ddc2c-3c94-4b79-acf9-279fc19bab8a",
   "metadata": {},
   "source": [
    "**df1 和 df3 合并**：考试的学生一样，属于行索引相同的 dataframe 合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "04023231-50f1-46d7-b4dc-8146e1332045",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Python</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>34</td>\n",
       "      <td>102</td>\n",
       "      <td>96</td>\n",
       "      <td>9</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>3</td>\n",
       "      <td>78</td>\n",
       "      <td>129</td>\n",
       "      <td>4</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>71</td>\n",
       "      <td>116</td>\n",
       "      <td>60</td>\n",
       "      <td>49</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>128</td>\n",
       "      <td>62</td>\n",
       "      <td>67</td>\n",
       "      <td>13</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>83</td>\n",
       "      <td>77</td>\n",
       "      <td>117</td>\n",
       "      <td>68</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>64</td>\n",
       "      <td>1</td>\n",
       "      <td>110</td>\n",
       "      <td>14</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>119</td>\n",
       "      <td>36</td>\n",
       "      <td>46</td>\n",
       "      <td>30</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>118</td>\n",
       "      <td>52</td>\n",
       "      <td>31</td>\n",
       "      <td>129</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>20</td>\n",
       "      <td>4</td>\n",
       "      <td>32</td>\n",
       "      <td>138</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>17</td>\n",
       "      <td>48</td>\n",
       "      <td>80</td>\n",
       "      <td>37</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras  Python  English\n",
       "A       34         102     96       9       85\n",
       "B        3          78    129       4       22\n",
       "C       71         116     60      49        0\n",
       "D      128          62     67      13       56\n",
       "E       83          77    117      68       33\n",
       "F       64           1    110      14       86\n",
       "G      119          36     46      30       75\n",
       "H      118          52     31     129       67\n",
       "I       20           4     32     138       74\n",
       "J       17          48     80      37       65"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 列合并\n",
    "pd.concat([df1, df3], axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef18cc79-1b9b-4517-9f5f-b9d3b11d36f7",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 2.insert 添加列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e8558c30-45e7-47bf-904f-a9ffffc65e56",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>57</td>\n",
       "      <td>84</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>44</td>\n",
       "      <td>95</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>15</td>\n",
       "      <td>115</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>60</td>\n",
       "      <td>72</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>7</td>\n",
       "      <td>99</td>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>10</td>\n",
       "      <td>115</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>129</td>\n",
       "      <td>37</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>60</td>\n",
       "      <td>89</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>128</td>\n",
       "      <td>121</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>68</td>\n",
       "      <td>34</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A       57          84     91\n",
       "B       44          95     84\n",
       "C       15         115     53\n",
       "D       60          72      9\n",
       "E        7          99    132\n",
       "F       10         115     46\n",
       "G      129          37     68\n",
       "H       60          89     32\n",
       "I      128         121      3\n",
       "J       68          34     41"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "21c99940-cf2c-4f69-91c7-6fa573e3490c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在 dataframe 中插入一列\n",
    "# loc: 插入位置索引\n",
    "# column: 列名\n",
    "# value: 默认值\n",
    "df.insert(loc=2, column='Math', value=91)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "428cc4f7-3658-4dcf-a32d-350b4ad729d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Math</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>57</td>\n",
       "      <td>84</td>\n",
       "      <td>91</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>44</td>\n",
       "      <td>95</td>\n",
       "      <td>91</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>15</td>\n",
       "      <td>115</td>\n",
       "      <td>91</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>60</td>\n",
       "      <td>72</td>\n",
       "      <td>91</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>7</td>\n",
       "      <td>99</td>\n",
       "      <td>91</td>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>10</td>\n",
       "      <td>115</td>\n",
       "      <td>91</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>129</td>\n",
       "      <td>37</td>\n",
       "      <td>91</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>60</td>\n",
       "      <td>89</td>\n",
       "      <td>91</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>128</td>\n",
       "      <td>121</td>\n",
       "      <td>91</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>68</td>\n",
       "      <td>34</td>\n",
       "      <td>91</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Math  Keras\n",
       "A       57          84    91     91\n",
       "B       44          95    91     84\n",
       "C       15         115    91     53\n",
       "D       60          72    91      9\n",
       "E        7          99    91    132\n",
       "F       10         115    91     46\n",
       "G      129          37    91     68\n",
       "H       60          89    91     32\n",
       "I      128         121    91      3\n",
       "J       68          34    91     41"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "228984a8-eb21-4edb-abfe-113c715b59c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>57</td>\n",
       "      <td>84</td>\n",
       "      <td>91</td>\n",
       "      <td>148</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>44</td>\n",
       "      <td>95</td>\n",
       "      <td>91</td>\n",
       "      <td>55</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>15</td>\n",
       "      <td>115</td>\n",
       "      <td>91</td>\n",
       "      <td>31</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>60</td>\n",
       "      <td>72</td>\n",
       "      <td>91</td>\n",
       "      <td>42</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>7</td>\n",
       "      <td>99</td>\n",
       "      <td>91</td>\n",
       "      <td>88</td>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>10</td>\n",
       "      <td>115</td>\n",
       "      <td>91</td>\n",
       "      <td>123</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>129</td>\n",
       "      <td>37</td>\n",
       "      <td>91</td>\n",
       "      <td>141</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>60</td>\n",
       "      <td>89</td>\n",
       "      <td>91</td>\n",
       "      <td>51</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>128</td>\n",
       "      <td>121</td>\n",
       "      <td>91</td>\n",
       "      <td>68</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>68</td>\n",
       "      <td>34</td>\n",
       "      <td>91</td>\n",
       "      <td>76</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Math  English  Keras\n",
       "A       57          84    91      148     91\n",
       "B       44          95    91       55     84\n",
       "C       15         115    91       31     53\n",
       "D       60          72    91       42      9\n",
       "E        7          99    91       88    132\n",
       "F       10         115    91      123     46\n",
       "G      129          37    91      141     68\n",
       "H       60          89    91       51     32\n",
       "I      128         121    91       68      3\n",
       "J       68          34    91       76     41"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取 Math 列的后边一列的索引\n",
    "target_col_idx = list(df.columns).index('Math') + 1\n",
    "\n",
    "# 插入一个数组\n",
    "df.insert(loc=target_col_idx, column='English', value=np.random.randint(0, 150, size=10))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0129a6db-f366-46f1-9c09-d0e18e0f371d",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 3.join"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "16826357-1315-449c-9133-06d7956d4836",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 该表记录 name 和 weight\n",
    "df1 = pd.DataFrame(data = {\n",
    "    'name': ['softpo', 'Daniel', 'Brandon', 'Ella'],\n",
    "    'weight': [70, 55, 75, 65]\n",
    "})\n",
    "# 该表记录 name 和 height\n",
    "df2 = pd.DataFrame(data = {\n",
    "    'name': ['softpo', 'Daniel', 'Brandon', 'Cindy'],\n",
    "    'height': [172, 170, 170, 166]\n",
    "})\n",
    "\n",
    "\n",
    "df3 = pd.DataFrame(data = {\n",
    "    '名字': ['softpo', 'Daniel', 'Brandon', 'Cindy'],\n",
    "    'height': [172, 170, 170, 166]\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cde60741-8b25-4da1-9528-292beabfa218",
   "metadata": {},
   "source": [
    "观察：\n",
    "\n",
    "- df1 和 df2 具有公共列 name，可进行列合并\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b972f7b-4683-4a99-8255-7bd4164af006",
   "metadata": {},
   "source": [
    "**列合并 df1 和 df2**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a27d7800-98a1-41c0-a9bd-d9d681252208",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>weight</th>\n",
       "      <th>height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>70</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>55</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>75</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  weight  height\n",
       "0   softpo      70     172\n",
       "1   Daniel      55     170\n",
       "2  Brandon      75     170"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 默认会找同名列进行合并\n",
    "#    如果有多个同名列，则会比较多个列即 df1.col1=df1.col1 and df1.col2=df1.col2 and ...\n",
    "pd.merge(df1, df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f6b7eb06-5e9d-43a7-8098-0b0aaf30ae1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>weight</th>\n",
       "      <th>名字</th>\n",
       "      <th>height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>70</td>\n",
       "      <td>softpo</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>55</td>\n",
       "      <td>Daniel</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>75</td>\n",
       "      <td>Brandon</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  weight       名字  height\n",
       "0   softpo      70   softpo     172\n",
       "1   Daniel      55   Daniel     170\n",
       "2  Brandon      75  Brandon     170"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 如果二者没有同名列，需要指定哪一列进行合并\n",
    "pd.merge(df1, df3, left_on='name', right_on='名字')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e496d37-2b15-45e0-bd16-df2ce2f56579",
   "metadata": {},
   "source": [
    "**merge 默认根据列合并，也可指定行索引进行合并**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d6464544-e891-417d-986d-7a7fd2a7a10b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P1</th>\n",
       "      <th>P2</th>\n",
       "      <th>P3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   P1  P2  P3\n",
       "A   3   1   1\n",
       "B   1   2   0\n",
       "C   9   2   8\n",
       "D   2   3   8\n",
       "E   0   7   3"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df4 = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)),\n",
    "                   index=list('ABCDE'),\n",
    "                   columns=['P1', 'P2', 'P3'])\n",
    "df4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "267be13c-aff3-4a93-abb8-845994fe7c4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'>\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "A    1.666667\n",
       "B    1.000000\n",
       "C    6.333333\n",
       "D    4.333333\n",
       "E    3.333333\n",
       "Name: Avg, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s4 = df4.mean(axis = 1)\n",
    "print(type(s4))\n",
    "\n",
    "#添加序列名\n",
    "s4.name = 'Avg'\n",
    "\n",
    "s4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a64a48fa-2460-4470-9a4b-7ed542b23be3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P1</th>\n",
       "      <th>P2</th>\n",
       "      <th>P3</th>\n",
       "      <th>Avg</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>6.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>4.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>3.333333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   P1  P2  P3       Avg\n",
       "A   3   1   1  1.666667\n",
       "B   1   2   0  1.000000\n",
       "C   9   2   8  6.333333\n",
       "D   2   3   8  4.333333\n",
       "E   0   7   3  3.333333"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(df4, s4, left_index=True, right_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d58587e7-2625-4687-827a-299441a9497f",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据清洗"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ef45b20-01da-4425-a0fd-919e2a73b18b",
   "metadata": {},
   "source": [
    "### **重复数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "31ceaf6b-4c88-46e9-bbf4-9068842f795d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3f3a00e5-9c2c-4825-8e9c-63cbd4eeb69d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    False\n",
       "1    False\n",
       "2     True\n",
       "3    False\n",
       "4     True\n",
       "5    False\n",
       "6    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#判断是否存在重复数据，这里的数据表示整行重复而非单个数据重复\n",
    "df.duplicated()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0be42219-083d-48ec-a2a1-71c933a4f9e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "3  green   15.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除重复数据，返回拷贝的数组\n",
    "df.drop_duplicates()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "567252f3-0d95-404b-a2ce-871e4db211aa",
   "metadata": {},
   "source": [
    "### **空数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bf36bb64-6f74-4f02-aecd-f4af16115bb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4806eb88-336a-4529-8a62-0ba068cd09b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0  False  False\n",
       "1  False  False\n",
       "2  False  False\n",
       "3  False  False\n",
       "4  False  False\n",
       "5   True  False\n",
       "6  False   True"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看空数据。什么是空？ None、np.NaN 等\n",
    "df.isnull()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "82f82532-85fe-4481-abf2-f117bb0f7590",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除空数据，返回拷贝的数组\n",
    "df.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "467a2fe4-5f0d-4d52-b98f-f9e1962ee98e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5      0    0.0\n",
       "6    red    0.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#填充空数据，返回拷贝的数组\n",
    "df.fillna(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc637b09-bdcd-4251-82e1-ab32c6bc5400",
   "metadata": {},
   "source": [
    "### **指定行或列删除**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "b7d4b39d-8e34-4e0c-8440-9da57551cc4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'color': ['red', 'blue', 'red', 'green', 'blue', None, 'red'],\n",
    "    'price': [10, 20, 10, 15, 20, 0, np.NaN]\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0ac89882-d39b-4707-8c92-7e62c3e3ed2c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red   10.0\n",
       "1   blue   20.0\n",
       "2    red   10.0\n",
       "3  green   15.0\n",
       "4   blue   20.0\n",
       "5   None    0.0\n",
       "6    red    NaN"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#删除列，在原对象上删除\n",
    "#del df['color']\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "55511290-a55a-4a0a-80f5-d413ee24e8ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color\n",
       "0    red\n",
       "1   blue\n",
       "2    red\n",
       "3  green\n",
       "4   blue\n",
       "5   None\n",
       "6    red"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除指定列，返回拷贝的对象\n",
    "df.drop(labels=['price'], axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "fee8a8af-9566-4f1b-ac52-48d9e7593421",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>blue</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>None</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>red</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  color  price\n",
       "2   red   10.0\n",
       "4  blue   20.0\n",
       "5  None    0.0\n",
       "6   red    NaN"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除指定行，返回拷贝的对象\n",
    "df.drop(labels=[0,1,3], axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0847243e-4ae2-491f-bbf2-21cb056d58c3",
   "metadata": {},
   "source": [
    "### **filter 过滤函数**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "d9364efe-d91e-4cbe-9775-c6249d8bdc18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America  France\n",
       "dog      3        7       1\n",
       "cat      2        8     256"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.array([[3, 7, 1], [2, 8, 256]]),\n",
    "                  index=['dog', 'cat'],\n",
    "                  columns=['China', 'America', 'France'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "3a12e969-9c80-429c-95ff-5cc0b36a9efa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  France\n",
       "dog      3       1\n",
       "cat      2     256"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#指定列\n",
    "df.filter(items=['China', 'France'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "c003dad5-361b-4d33-afbd-bf9fd6c46bdf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cat</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America\n",
       "dog      3        7\n",
       "cat      2        8"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#过滤索引名以 a 结尾 的列，因为指定了 axis=1 表示列\n",
    "df.filter(regex='a$', axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c3213dd5-87b5-4fcd-963b-45fc087f1df6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>China</th>\n",
       "      <th>America</th>\n",
       "      <th>France</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     China  America  France\n",
       "dog      3        7       1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#过滤索引名中包含 og 的行，因为指定了 axis=0 表示行\n",
    "df.filter(like='og', axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4140bd33-1cd0-4af1-bde5-3975d10ce828",
   "metadata": {},
   "source": [
    "### **异常值过滤**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "52a3e7f4-9f53-4492-8dff-359fbb55307a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.293266</td>\n",
       "      <td>-0.850942</td>\n",
       "      <td>0.785787</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.692441</td>\n",
       "      <td>-0.198684</td>\n",
       "      <td>-0.108931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.356168</td>\n",
       "      <td>0.266124</td>\n",
       "      <td>-0.501661</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.066159</td>\n",
       "      <td>0.980598</td>\n",
       "      <td>-0.513379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.233026</td>\n",
       "      <td>1.823625</td>\n",
       "      <td>0.097390</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2\n",
       "0 -0.293266 -0.850942  0.785787\n",
       "1  0.692441 -0.198684 -0.108931\n",
       "2 -0.356168  0.266124 -0.501661\n",
       "3 -1.066159  0.980598 -0.513379\n",
       "4  1.233026  1.823625  0.097390"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randn(10000,3))\n",
    "df2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "4f0988e4-cb6e-446d-ade0-05299540b1cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0   -0.001937\n",
       "1    0.000284\n",
       "2   -0.009579\n",
       "dtype: float64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#列平均值\n",
    "df2.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "47d19507-1d01-46cf-a04f-873750bae28f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.003142\n",
       "1    1.009070\n",
       "2    1.004884\n",
       "dtype: float64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#列标准差\n",
    "df2.std()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89651b30-4be7-40ab-bb0b-b516432dfd29",
   "metadata": {},
   "source": [
    "**假设**：\n",
    "<font size=4>$\\sigma$</font> 表示标准差\n",
    "，如果正态分布值大于<font size=4>$3\\sigma$</font>，则判定为异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "d5e1983f-80f0-45ec-9efb-80dd5c86a408",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>3.254247</td>\n",
       "      <td>-2.046149</td>\n",
       "      <td>0.650627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>949</th>\n",
       "      <td>3.478021</td>\n",
       "      <td>0.773076</td>\n",
       "      <td>-0.621477</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1378</th>\n",
       "      <td>3.277465</td>\n",
       "      <td>-1.171786</td>\n",
       "      <td>-0.644713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2646</th>\n",
       "      <td>3.542566</td>\n",
       "      <td>-1.282652</td>\n",
       "      <td>0.602836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2656</th>\n",
       "      <td>3.034148</td>\n",
       "      <td>1.648618</td>\n",
       "      <td>0.507084</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             0         1         2\n",
       "829   3.254247 -2.046149  0.650627\n",
       "949   3.478021  0.773076 -0.621477\n",
       "1378  3.277465 -1.171786 -0.644713\n",
       "2646  3.542566 -1.282652  0.602836\n",
       "2656  3.034148  1.648618  0.507084"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = df2.abs() > 3 * df2.std()\n",
    "\n",
    "#查看第一列异常值。注意：dataframe[i] 用来取列\n",
    "df2[cond[0]].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "7728789d-38f6-45a4-8266-cbcb21ce1f4c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.185611</td>\n",
       "      <td>3.298355</td>\n",
       "      <td>0.100018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>-0.777902</td>\n",
       "      <td>-0.315732</td>\n",
       "      <td>-3.331521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>-0.496957</td>\n",
       "      <td>3.131071</td>\n",
       "      <td>1.103027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>346</th>\n",
       "      <td>-0.239989</td>\n",
       "      <td>0.139517</td>\n",
       "      <td>-3.051349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>-0.359462</td>\n",
       "      <td>-1.230594</td>\n",
       "      <td>3.207177</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            0         1         2\n",
       "6    1.185611  3.298355  0.100018\n",
       "252 -0.777902 -0.315732 -3.331521\n",
       "297 -0.496957  3.131071  1.103027\n",
       "346 -0.239989  0.139517 -3.051349\n",
       "368 -0.359462 -1.230594  3.207177"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看每一列的异常值\n",
    "condn = cond[0] | cond[1] | cond[2]\n",
    "df2[condn].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "fa62879b-6d0d-49ae-97e8-fca66c315024",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.185611</td>\n",
       "      <td>3.298355</td>\n",
       "      <td>0.100018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>-0.777902</td>\n",
       "      <td>-0.315732</td>\n",
       "      <td>-3.331521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>-0.496957</td>\n",
       "      <td>3.131071</td>\n",
       "      <td>1.103027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>346</th>\n",
       "      <td>-0.239989</td>\n",
       "      <td>0.139517</td>\n",
       "      <td>-3.051349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>-0.359462</td>\n",
       "      <td>-1.230594</td>\n",
       "      <td>3.207177</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            0         1         2\n",
       "6    1.185611  3.298355  0.100018\n",
       "252 -0.777902 -0.315732 -3.331521\n",
       "297 -0.496957  3.131071  1.103027\n",
       "346 -0.239989  0.139517 -3.051349\n",
       "368 -0.359462 -1.230594  3.207177"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#另一种方式查看每一列的异常值\n",
    "c2 = cond.any(axis=1)\n",
    "df2[c2].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e2e489b7-68f8-4016-ae14-01ef0e16bae5",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据转换"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "850cb4e0-2a4d-42f1-9430-506451b6b0c2",
   "metadata": {},
   "source": [
    "### 轴和元素的替换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "79f068aa-1316-41f4-a0b6-080930175a61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       5           7    2.0\n",
       "B       9           8    0.0\n",
       "C       4           5    5.0\n",
       "D       1           9    8.0\n",
       "E       6           8    NaN\n",
       "F       9           3    2.0\n",
       "G       7           2    9.0\n",
       "H       2           2    4.0\n",
       "I       9           0    4.0\n",
       "J       7           2    1.0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 10, size=(10,3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'])\n",
    "\n",
    "#赋空值\n",
    "df.iloc[4, 2] = None\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "010bdae2-485c-4221-a01c-5345f6357c0f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>人工智能</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A2</th>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B2</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    人工智能  Tensorflow  Keras\n",
       "A2     5           7    2.0\n",
       "B2     9           8    0.0\n",
       "C      4           5    5.0\n",
       "D      1           9    8.0\n",
       "E      6           8    NaN\n",
       "F      9           3    2.0\n",
       "G      7           2    9.0\n",
       "H      2           2    4.0\n",
       "I      9           0    4.0\n",
       "J      7           2    1.0"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#重命名行、列索引，返回拷贝的新对象\n",
    "df.rename(index = {'A': 'A2', 'B': 'B2'},\n",
    "          columns={'Python': '人工智能'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "8d8829ba-b97a-4c6f-8437-3b7ba218fe1c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1024</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>1024</td>\n",
       "      <td>1024.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A    1024           7     2.0\n",
       "B       9           8     0.0\n",
       "C       4        1024  1024.0\n",
       "D       1           9     8.0\n",
       "E       6           8     NaN\n",
       "F       9           3     2.0\n",
       "G       7           2     9.0\n",
       "H       2           2     4.0\n",
       "I       9           0     4.0\n",
       "J       7           2     1.0"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 替换值。范围是所有元素，如果匹配上则替换。返回拷贝的新对象\n",
    "df.replace(5, 1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "260fe416-bb35-445f-88a8-fa85ab0e9cc3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1024</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>1024</td>\n",
       "      <td>1024.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>1024</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A    1024           7     2.0\n",
       "B       9           8     0.0\n",
       "C       4        1024  1024.0\n",
       "D       1           9     8.0\n",
       "E       6           8     NaN\n",
       "F       9        1024     2.0\n",
       "G       7           2     9.0\n",
       "H       2           2     4.0\n",
       "I       9           0     4.0\n",
       "J       7           2     1.0"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对多个元素进行替换\n",
    "df.replace([3, 5], 1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "45c5bcec-7790-4915-a7c6-dc419e1da0ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>9999</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>9999</td>\n",
       "      <td>9999.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>-1000</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A    9999           7     2.0\n",
       "B       9           8     0.0\n",
       "C       4        9999  9999.0\n",
       "D       1           9     8.0\n",
       "E       6           8     NaN\n",
       "F       9       -1000     2.0\n",
       "G       7           2     9.0\n",
       "H       2           2     4.0\n",
       "I       9           0     4.0\n",
       "J       7           2     1.0"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定多个替换对儿\n",
    "df.replace({3 : -1000, 5 : 9999})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "94a78102-1c1a-4691-9080-c0095d4746e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6666</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       5           7    2.0\n",
       "B       9           8    0.0\n",
       "C       4           5    5.0\n",
       "D       1           9    8.0\n",
       "E    6666           8    NaN\n",
       "F       9           3    2.0\n",
       "G       7           2    9.0\n",
       "H       2           2    4.0\n",
       "I       9           0    4.0\n",
       "J       7           2    1.0"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对某一列进行替换\n",
    "df.replace({'Python' : 6}, 6666)\n",
    "\n",
    "# 对某一列多个元素进行替换\n",
    "#df.replace({'Python' : [4, 5]}, 6666)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a05d5db5-ae25-4d41-8153-981ddee4428c",
   "metadata": {},
   "source": [
    "### map 修改元素"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65f1b9cc-7c8c-4c69-9d0f-83f7f3ce4052",
   "metadata": {},
   "source": [
    "#### **Series 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "5bd64ec8-2db0-4587-b4e1-ddc819c67edf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    6\n",
       "B    0\n",
       "C    3\n",
       "D    1\n",
       "E    4\n",
       "F    1\n",
       "G    1\n",
       "H    6\n",
       "I    6\n",
       "J    1\n",
       "Name: Keras, dtype: int64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 10, size=(10,3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'])\n",
    "\n",
    "s = df['Keras']\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "4c6e21f5-9b60-49e3-9250-2cc4ef360eac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A      NaN\n",
       "B      NaN\n",
       "C      NaN\n",
       "D    Hello\n",
       "E      NaN\n",
       "F    Hello\n",
       "G    Hello\n",
       "H      NaN\n",
       "I      NaN\n",
       "J    Hello\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#字典映射\n",
    "s.map({1: 'Hello', 5: 'World', 7: 'AI'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "8c5e7ae5-0199-40d9-8bcd-7dd49c5922f2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A        6\n",
       "B        0\n",
       "C        3\n",
       "D    Hello\n",
       "E        4\n",
       "F    Hello\n",
       "G    Hello\n",
       "H        6\n",
       "I        6\n",
       "J    Hello\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#字典映射2，如果不存在映射则不改变值\n",
    "\n",
    "def convert(x):\n",
    "    d = {1: 'Hello', 5: 'World', 7: 'AI'}\n",
    "    return d[x] if d.get(x) != None else x\n",
    "\n",
    "s.map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "d9331b9f-3f30-4c6c-8839-881aaed13ff3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A        6\n",
       "B        0\n",
       "C        3\n",
       "D    Hello\n",
       "E        4\n",
       "F    Hello\n",
       "G    Hello\n",
       "H        6\n",
       "I        6\n",
       "J    Hello\n",
       "Name: Keras, dtype: object"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#隐式函数\n",
    "d = {1: 'Hello', 5: 'World', 7: 'AI'}\n",
    "s.map(lambda x:d.get(x) if d.get(x) != None else x)\n",
    "#s.map(lambda x:True if x >= 5 else False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d491077-b116-4ada-8d2f-a89a8ad8c836",
   "metadata": {},
   "source": [
    "#### **DataFrame 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "0b737b1f-489d-45dd-a973-eec733395d87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>40</td>\n",
       "      <td>79</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>69</td>\n",
       "      <td>93</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>59</td>\n",
       "      <td>15</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>26</td>\n",
       "      <td>54</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>87</td>\n",
       "      <td>10</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      40    79       66\n",
       "B      69    93       25\n",
       "C      59    15       36\n",
       "D      26    54       23\n",
       "E      87    10       58"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>50</td>\n",
       "      <td>89</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>79</td>\n",
       "      <td>103</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>69</td>\n",
       "      <td>25</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>36</td>\n",
       "      <td>64</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>97</td>\n",
       "      <td>20</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      50    89       76\n",
       "B      79   103       35\n",
       "C      69    25       46\n",
       "D      36    64       33\n",
       "E      97    20       68"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "display(df.head())\n",
    "\n",
    "df = df.map(lambda  x: x + 10)\n",
    "\n",
    "display(df.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e894ce7a-cc48-4947-9005-5cf36d8094d4",
   "metadata": {},
   "source": [
    "### apply 修改元素"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "97f6aaea-79c2-4506-b017-4a1320ded61c",
   "metadata": {},
   "source": [
    "#### **Series 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "4f83242a-612f-4e07-a557-74f84cb378d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    不及格\n",
       "1    不及格\n",
       "2     中等\n",
       "3     中等\n",
       "4    不及格\n",
       "5    不及格\n",
       "6    不及格\n",
       "7     中等\n",
       "8    不及格\n",
       "9    不及格\n",
       "Name: Python, dtype: object"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Python程度</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>不及格</td>\n",
       "      <td>97</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>41</td>\n",
       "      <td>不及格</td>\n",
       "      <td>1</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>65</td>\n",
       "      <td>中等</td>\n",
       "      <td>7</td>\n",
       "      <td>98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61</td>\n",
       "      <td>中等</td>\n",
       "      <td>36</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>33</td>\n",
       "      <td>不及格</td>\n",
       "      <td>61</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>23</td>\n",
       "      <td>不及格</td>\n",
       "      <td>41</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>22</td>\n",
       "      <td>不及格</td>\n",
       "      <td>19</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>65</td>\n",
       "      <td>中等</td>\n",
       "      <td>49</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>17</td>\n",
       "      <td>不及格</td>\n",
       "      <td>12</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>44</td>\n",
       "      <td>不及格</td>\n",
       "      <td>37</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python Python程度  Math  English\n",
       "0       2      不及格    97       86\n",
       "1      41      不及格     1       83\n",
       "2      65       中等     7       98\n",
       "3      61       中等    36       86\n",
       "4      33      不及格    61       25\n",
       "5      23      不及格    41       42\n",
       "6      22      不及格    19       44\n",
       "7      65       中等    49       68\n",
       "8      17      不及格    12       75\n",
       "9      44      不及格    37       72"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "#--------------------\n",
    "\n",
    "#定义规则函数\n",
    "def convert(x):\n",
    "    if x < 60:\n",
    "        return '不及格'\n",
    "    elif x < 80:\n",
    "        return '中等'\n",
    "    else:\n",
    "        return '优秀'\n",
    "\n",
    "#使用 series.apply 方法、根据规则函数获取学生的 Python 程度\n",
    "res = s.apply(convert)\n",
    "display(res.head(10))\n",
    "\n",
    "#--------------------\n",
    "\n",
    "# 将得到的列插入原表\n",
    "target_col_idx = list(df.columns).index('Python') + 1\n",
    "df.insert(loc=target_col_idx, column='Python程度', value=res)\n",
    "df.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "6b1fb3cb-1ccc-4e7a-b64d-36876fa11b4d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>40</td>\n",
       "      <td>8</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>58</td>\n",
       "      <td>43</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>85</td>\n",
       "      <td>32</td>\n",
       "      <td>59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>50</td>\n",
       "      <td>25</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      40     8       37\n",
       "1      58    43       20\n",
       "2      85    32       59\n",
       "3      50    25       65\n",
       "4       0     0       51"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>50</td>\n",
       "      <td>8</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>68</td>\n",
       "      <td>43</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>95</td>\n",
       "      <td>32</td>\n",
       "      <td>59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60</td>\n",
       "      <td>25</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      50     8       37\n",
       "1      68    43       20\n",
       "2      95    32       59\n",
       "3      60    25       65\n",
       "4      10     0       51"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "display(df.head(5))\n",
    "\n",
    "# apply 隐式函数\n",
    "df['Python'] = s.apply(lambda x : x + 10)\n",
    "display(df.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "27070704-6803-4a6f-8e6d-4c68cdde5a11",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Python程度</th>\n",
       "      <th>Math</th>\n",
       "      <th>Math程度</th>\n",
       "      <th>English</th>\n",
       "      <th>English程度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>不及格</td>\n",
       "      <td>60</td>\n",
       "      <td>中等</td>\n",
       "      <td>70</td>\n",
       "      <td>中等</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>59</td>\n",
       "      <td>不及格</td>\n",
       "      <td>5</td>\n",
       "      <td>不及格</td>\n",
       "      <td>51</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>68</td>\n",
       "      <td>中等</td>\n",
       "      <td>69</td>\n",
       "      <td>中等</td>\n",
       "      <td>53</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>38</td>\n",
       "      <td>不及格</td>\n",
       "      <td>31</td>\n",
       "      <td>不及格</td>\n",
       "      <td>95</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>72</td>\n",
       "      <td>中等</td>\n",
       "      <td>86</td>\n",
       "      <td>优秀</td>\n",
       "      <td>51</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>42</td>\n",
       "      <td>不及格</td>\n",
       "      <td>92</td>\n",
       "      <td>优秀</td>\n",
       "      <td>63</td>\n",
       "      <td>中等</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>99</td>\n",
       "      <td>优秀</td>\n",
       "      <td>89</td>\n",
       "      <td>优秀</td>\n",
       "      <td>14</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>93</td>\n",
       "      <td>优秀</td>\n",
       "      <td>1</td>\n",
       "      <td>不及格</td>\n",
       "      <td>21</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>37</td>\n",
       "      <td>不及格</td>\n",
       "      <td>55</td>\n",
       "      <td>不及格</td>\n",
       "      <td>18</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>49</td>\n",
       "      <td>不及格</td>\n",
       "      <td>33</td>\n",
       "      <td>不及格</td>\n",
       "      <td>5</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python Python程度  Math Math程度  English English程度\n",
       "0       7      不及格    60     中等       70        中等\n",
       "1      59      不及格     5    不及格       51       不及格\n",
       "2      68       中等    69     中等       53       不及格\n",
       "3      38      不及格    31    不及格       95        优秀\n",
       "4      72       中等    86     优秀       51       不及格\n",
       "5      42      不及格    92     优秀       63        中等\n",
       "6      99       优秀    89     优秀       14       不及格\n",
       "7      93       优秀     1    不及格       21       不及格\n",
       "8      37      不及格    55    不及格       18       不及格\n",
       "9      49      不及格    33    不及格        5       不及格"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#多列转换\n",
    "#成绩表\n",
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "#定义规则函数\n",
    "def convert(x):\n",
    "    if x < 60:\n",
    "        return '不及格'\n",
    "    elif x < 80:\n",
    "        return '中等'\n",
    "    else:\n",
    "        return '优秀'\n",
    "\n",
    "for course in df.columns:\n",
    "    s = df[course]\n",
    "    #使用 series.apply 方法、根据规则函数获取学生的 Python 程度\n",
    "    res = s.apply(convert)\n",
    "    \n",
    "    # 将得到的列插入原表\n",
    "    target_col_idx = list(df.columns).index(course) + 1\n",
    "    df.insert(loc=target_col_idx, column=course + '程度', value=res)\n",
    "df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "746309a5-d6c1-4db0-9029-5476017faafc",
   "metadata": {},
   "source": [
    "#### **DataFrame 对象**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "3a14f669-6f3a-43cf-b77a-10174f08a255",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>82</td>\n",
       "      <td>91</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>32</td>\n",
       "      <td>12</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>73</td>\n",
       "      <td>60</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>75</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>83</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      82    91       46\n",
       "1      32    12       48\n",
       "2      73    60       88\n",
       "3       0    75        4\n",
       "4      15    83       81"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>92</td>\n",
       "      <td>91</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>42</td>\n",
       "      <td>12</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>83</td>\n",
       "      <td>60</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10</td>\n",
       "      <td>75</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>25</td>\n",
       "      <td>83</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      92    91       46\n",
       "1      42    12       48\n",
       "2      83    60       88\n",
       "3      10    75        4\n",
       "4      25    83       81"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(30, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "s = df['Python']\n",
    "\n",
    "display(df.head(5))\n",
    "\n",
    "# apply 隐式函数\n",
    "df['Python'] = s.map(lambda x : x + 10)\n",
    "display(df.head(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f752e7b-4ea0-4e45-a367-579c9576210c",
   "metadata": {},
   "source": [
    "旧的 applymap 方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "d2983d9c-c761-4c60-a1a0-27932a33f1f5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>74</td>\n",
       "      <td>81</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>47</td>\n",
       "      <td>47</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>33</td>\n",
       "      <td>25</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>8</td>\n",
       "      <td>99</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>58</td>\n",
       "      <td>38</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      74    81       34\n",
       "B      47    47       34\n",
       "C      33    25       10\n",
       "D       8    99       58\n",
       "E      58    38       11"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_4214/1677535660.py:7: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda  x: x + 10)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>84</td>\n",
       "      <td>91</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>57</td>\n",
       "      <td>57</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>43</td>\n",
       "      <td>35</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>18</td>\n",
       "      <td>109</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>68</td>\n",
       "      <td>48</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      84    91       44\n",
       "B      57    57       44\n",
       "C      43    35       20\n",
       "D      18   109       68\n",
       "E      68    48       21"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "display(df.head())\n",
    "\n",
    "#DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
    "df = df.applymap(lambda  x: x + 10)\n",
    "\n",
    "display(df.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73a48348-820f-4750-a527-7da163b00586",
   "metadata": {},
   "source": [
    "### transform 数据变形\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1ab0585-7c0b-45ca-8886-1ecd88653a18",
   "metadata": {},
   "source": [
    "#### Series 对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "79093a45-3a47-4e24-8788-894e525973d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>47</td>\n",
       "      <td>99</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>59</td>\n",
       "      <td>75</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13</td>\n",
       "      <td>93</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>31</td>\n",
       "      <td>88</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79</td>\n",
       "      <td>71</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>88</td>\n",
       "      <td>63</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92</td>\n",
       "      <td>39</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>89</td>\n",
       "      <td>39</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>50</td>\n",
       "      <td>53</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>86</td>\n",
       "      <td>89</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      47    99        9\n",
       "1      59    75       70\n",
       "2      13    93       66\n",
       "3      31    88       48\n",
       "4      79    71       21\n",
       "5      88    63       37\n",
       "6      92    39       45\n",
       "7      89    39        0\n",
       "8      50    53       77\n",
       "9      86    89       22"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "8d1ba4b5-a809-455e-b07d-2ba5874a1614",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     57\n",
       "1     69\n",
       "2     23\n",
       "3     41\n",
       "4     89\n",
       "5     98\n",
       "6    102\n",
       "7     99\n",
       "8     60\n",
       "9     96\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].transform(lambda x:x+10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "614e4656-cbad-4ca0-ab05-12dcf35a4fc1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>57</td>\n",
       "      <td>25</td>\n",
       "      <td>2.581313e+20</td>\n",
       "      <td>6.855655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>69</td>\n",
       "      <td>75</td>\n",
       "      <td>4.201210e+25</td>\n",
       "      <td>7.681146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>23</td>\n",
       "      <td>25</td>\n",
       "      <td>4.424134e+05</td>\n",
       "      <td>3.605551</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>41</td>\n",
       "      <td>25</td>\n",
       "      <td>2.904885e+13</td>\n",
       "      <td>5.567764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>89</td>\n",
       "      <td>75</td>\n",
       "      <td>2.038281e+34</td>\n",
       "      <td>8.888194</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>98</td>\n",
       "      <td>75</td>\n",
       "      <td>1.651636e+38</td>\n",
       "      <td>9.380832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>102</td>\n",
       "      <td>75</td>\n",
       "      <td>9.017628e+39</td>\n",
       "      <td>9.591663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>99</td>\n",
       "      <td>75</td>\n",
       "      <td>4.489613e+38</td>\n",
       "      <td>9.433981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>60</td>\n",
       "      <td>25</td>\n",
       "      <td>5.184706e+21</td>\n",
       "      <td>7.071068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>96</td>\n",
       "      <td>75</td>\n",
       "      <td>2.235247e+37</td>\n",
       "      <td>9.273618</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   <lambda>  cb           exp      sqrt\n",
       "0        57  25  2.581313e+20  6.855655\n",
       "1        69  75  4.201210e+25  7.681146\n",
       "2        23  25  4.424134e+05  3.605551\n",
       "3        41  25  2.904885e+13  5.567764\n",
       "4        89  75  2.038281e+34  8.888194\n",
       "5        98  75  1.651636e+38  9.380832\n",
       "6       102  75  9.017628e+39  9.591663\n",
       "7        99  75  4.489613e+38  9.433981\n",
       "8        60  25  5.184706e+21  7.071068\n",
       "9        96  75  2.235247e+37  9.273618"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def cb(x):\n",
    "    return 25 if x <= 50 else 75\n",
    "\n",
    "df['Python'].transform([lambda x:x+10, cb, np.exp, np. sqrt])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31c2d38c-12ba-4224-b15a-0cbc734535bb",
   "metadata": {},
   "source": [
    "#### DataFrame 对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "8ee434b3-b56c-4252-9090-fae796f83243",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>24</td>\n",
       "      <td>75</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14</td>\n",
       "      <td>86</td>\n",
       "      <td>73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4</td>\n",
       "      <td>67</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>91</td>\n",
       "      <td>20</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>36</td>\n",
       "      <td>76</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>42</td>\n",
       "      <td>90</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>25</td>\n",
       "      <td>25</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>99</td>\n",
       "      <td>42</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>89</td>\n",
       "      <td>82</td>\n",
       "      <td>53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>86</td>\n",
       "      <td>47</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      24    75       16\n",
       "1      14    86       73\n",
       "2       4    67       72\n",
       "3      91    20       58\n",
       "4      36    76       65\n",
       "5      42    90       58\n",
       "6      25    25       80\n",
       "7      99    42       78\n",
       "8      89    82       53\n",
       "9      86    47       16"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "546ce7b5-d0f9-4f35-a883-2375136ac74e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34</td>\n",
       "      <td>85</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>24</td>\n",
       "      <td>96</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14</td>\n",
       "      <td>77</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>101</td>\n",
       "      <td>30</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>46</td>\n",
       "      <td>86</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>52</td>\n",
       "      <td>100</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>35</td>\n",
       "      <td>35</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>109</td>\n",
       "      <td>52</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>99</td>\n",
       "      <td>92</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>96</td>\n",
       "      <td>57</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "0      34    85       26\n",
       "1      24    96       83\n",
       "2      14    77       82\n",
       "3     101    30       68\n",
       "4      46    86       75\n",
       "5      52   100       68\n",
       "6      35    35       90\n",
       "7     109    52       88\n",
       "8      99    92       63\n",
       "9      96    57       26"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.transform(lambda x:x+10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "2bdbb34f-0caa-4dad-9730-bdfd69cf4f25",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4.898979</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3.741657</td>\n",
       "      <td>2.235247e+37</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.252363e+29</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9.539392</td>\n",
       "      <td>4.851652e+08</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.014800e+33</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6.480741</td>\n",
       "      <td>1.220403e+39</td>\n",
       "      <td>68</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>7.200490e+10</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>9.949874</td>\n",
       "      <td>1.739275e+18</td>\n",
       "      <td>88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9.433981</td>\n",
       "      <td>4.093997e+35</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9.273618</td>\n",
       "      <td>2.581313e+20</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python          Math  English\n",
       "0  4.898979  3.733242e+32       26\n",
       "1  3.741657  2.235247e+37       83\n",
       "2  2.000000  1.252363e+29       82\n",
       "3  9.539392  4.851652e+08       68\n",
       "4  6.000000  1.014800e+33       75\n",
       "5  6.480741  1.220403e+39       68\n",
       "6  5.000000  7.200490e+10       90\n",
       "7  9.949874  1.739275e+18       88\n",
       "8  9.433981  4.093997e+35       63\n",
       "9  9.273618  2.581313e+20       26"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对多列指定不同的操作\n",
    "df.transform({'Python': np.sqrt, 'Math': np.exp, 'English': lambda x:x+10})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "d26df2ba-4b55-474a-982d-e1031683e92f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"4\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"4\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"4\" halign=\"left\">English</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "      <th>&lt;lambda&gt;</th>\n",
       "      <th>cb</th>\n",
       "      <th>exp</th>\n",
       "      <th>sqrt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34</td>\n",
       "      <td>25</td>\n",
       "      <td>2.648912e+10</td>\n",
       "      <td>4.898979</td>\n",
       "      <td>85</td>\n",
       "      <td>75</td>\n",
       "      <td>3.733242e+32</td>\n",
       "      <td>8.660254</td>\n",
       "      <td>26</td>\n",
       "      <td>25</td>\n",
       "      <td>8.886111e+06</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>24</td>\n",
       "      <td>25</td>\n",
       "      <td>1.202604e+06</td>\n",
       "      <td>3.741657</td>\n",
       "      <td>96</td>\n",
       "      <td>75</td>\n",
       "      <td>2.235247e+37</td>\n",
       "      <td>9.273618</td>\n",
       "      <td>83</td>\n",
       "      <td>75</td>\n",
       "      <td>5.052394e+31</td>\n",
       "      <td>8.544004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14</td>\n",
       "      <td>25</td>\n",
       "      <td>5.459815e+01</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>77</td>\n",
       "      <td>75</td>\n",
       "      <td>1.252363e+29</td>\n",
       "      <td>8.185353</td>\n",
       "      <td>82</td>\n",
       "      <td>75</td>\n",
       "      <td>1.858672e+31</td>\n",
       "      <td>8.485281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>101</td>\n",
       "      <td>75</td>\n",
       "      <td>3.317400e+39</td>\n",
       "      <td>9.539392</td>\n",
       "      <td>30</td>\n",
       "      <td>25</td>\n",
       "      <td>4.851652e+08</td>\n",
       "      <td>4.472136</td>\n",
       "      <td>68</td>\n",
       "      <td>75</td>\n",
       "      <td>1.545539e+25</td>\n",
       "      <td>7.615773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>46</td>\n",
       "      <td>25</td>\n",
       "      <td>4.311232e+15</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>86</td>\n",
       "      <td>75</td>\n",
       "      <td>1.014800e+33</td>\n",
       "      <td>8.717798</td>\n",
       "      <td>75</td>\n",
       "      <td>75</td>\n",
       "      <td>1.694889e+28</td>\n",
       "      <td>8.062258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>52</td>\n",
       "      <td>25</td>\n",
       "      <td>1.739275e+18</td>\n",
       "      <td>6.480741</td>\n",
       "      <td>100</td>\n",
       "      <td>75</td>\n",
       "      <td>1.220403e+39</td>\n",
       "      <td>9.486833</td>\n",
       "      <td>68</td>\n",
       "      <td>75</td>\n",
       "      <td>1.545539e+25</td>\n",
       "      <td>7.615773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>35</td>\n",
       "      <td>25</td>\n",
       "      <td>7.200490e+10</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>35</td>\n",
       "      <td>25</td>\n",
       "      <td>7.200490e+10</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>90</td>\n",
       "      <td>75</td>\n",
       "      <td>5.540622e+34</td>\n",
       "      <td>8.944272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>109</td>\n",
       "      <td>75</td>\n",
       "      <td>9.889030e+42</td>\n",
       "      <td>9.949874</td>\n",
       "      <td>52</td>\n",
       "      <td>25</td>\n",
       "      <td>1.739275e+18</td>\n",
       "      <td>6.480741</td>\n",
       "      <td>88</td>\n",
       "      <td>75</td>\n",
       "      <td>7.498417e+33</td>\n",
       "      <td>8.831761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>99</td>\n",
       "      <td>75</td>\n",
       "      <td>4.489613e+38</td>\n",
       "      <td>9.433981</td>\n",
       "      <td>92</td>\n",
       "      <td>75</td>\n",
       "      <td>4.093997e+35</td>\n",
       "      <td>9.055385</td>\n",
       "      <td>63</td>\n",
       "      <td>75</td>\n",
       "      <td>1.041376e+23</td>\n",
       "      <td>7.280110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>96</td>\n",
       "      <td>75</td>\n",
       "      <td>2.235247e+37</td>\n",
       "      <td>9.273618</td>\n",
       "      <td>57</td>\n",
       "      <td>25</td>\n",
       "      <td>2.581313e+20</td>\n",
       "      <td>6.855655</td>\n",
       "      <td>26</td>\n",
       "      <td>25</td>\n",
       "      <td>8.886111e+06</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python                                 Math                              \\\n",
       "  <lambda>  cb           exp      sqrt <lambda>  cb           exp      sqrt   \n",
       "0       34  25  2.648912e+10  4.898979       85  75  3.733242e+32  8.660254   \n",
       "1       24  25  1.202604e+06  3.741657       96  75  2.235247e+37  9.273618   \n",
       "2       14  25  5.459815e+01  2.000000       77  75  1.252363e+29  8.185353   \n",
       "3      101  75  3.317400e+39  9.539392       30  25  4.851652e+08  4.472136   \n",
       "4       46  25  4.311232e+15  6.000000       86  75  1.014800e+33  8.717798   \n",
       "5       52  25  1.739275e+18  6.480741      100  75  1.220403e+39  9.486833   \n",
       "6       35  25  7.200490e+10  5.000000       35  25  7.200490e+10  5.000000   \n",
       "7      109  75  9.889030e+42  9.949874       52  25  1.739275e+18  6.480741   \n",
       "8       99  75  4.489613e+38  9.433981       92  75  4.093997e+35  9.055385   \n",
       "9       96  75  2.235247e+37  9.273618       57  25  2.581313e+20  6.855655   \n",
       "\n",
       "   English                              \n",
       "  <lambda>  cb           exp      sqrt  \n",
       "0       26  25  8.886111e+06  4.000000  \n",
       "1       83  75  5.052394e+31  8.544004  \n",
       "2       82  75  1.858672e+31  8.485281  \n",
       "3       68  75  1.545539e+25  7.615773  \n",
       "4       75  75  1.694889e+28  8.062258  \n",
       "5       68  75  1.545539e+25  7.615773  \n",
       "6       90  75  5.540622e+34  8.944272  \n",
       "7       88  75  7.498417e+33  8.831761  \n",
       "8       63  75  1.041376e+23  7.280110  \n",
       "9       26  25  8.886111e+06  4.000000  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MultiIndex([( 'Python', '<lambda>'),\n",
      "            ( 'Python',       'cb'),\n",
      "            ( 'Python',      'exp'),\n",
      "            ( 'Python',     'sqrt'),\n",
      "            (   'Math', '<lambda>'),\n",
      "            (   'Math',       'cb'),\n",
      "            (   'Math',      'exp'),\n",
      "            (   'Math',     'sqrt'),\n",
      "            ('English', '<lambda>'),\n",
      "            ('English',       'cb'),\n",
      "            ('English',      'exp'),\n",
      "            ('English',     'sqrt')],\n",
      "           )\n"
     ]
    }
   ],
   "source": [
    "def cb(x):\n",
    "    return 25 if x <= 50 else 75\n",
    "\n",
    "#多个列同时应用多个操作。会产生 列数*操作数 个列，这些列通过多级索引组织\n",
    "res = df.transform([lambda x:x+10, cb, np.exp, np. sqrt])\n",
    "display(res)\n",
    "print(res.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c971d783-da16-4bf7-9890-d2570f256318",
   "metadata": {},
   "source": [
    "### 重排随机抽样哑变量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bef842a3-d635-466b-a378-cd1c1ef260fb",
   "metadata": {},
   "source": [
    "**重排**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "d3f84cbf-4818-4d7f-ba03-12eeb24b80f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>18</td>\n",
       "      <td>50</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>13</td>\n",
       "      <td>23</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>30</td>\n",
       "      <td>16</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>66</td>\n",
       "      <td>16</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>34</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>88</td>\n",
       "      <td>88</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>5</td>\n",
       "      <td>98</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>40</td>\n",
       "      <td>60</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>46</td>\n",
       "      <td>97</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>90</td>\n",
       "      <td>27</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A      18    50       38\n",
       "B      13    23       66\n",
       "C      30    16       69\n",
       "D      66    16       34\n",
       "E      34     2       60\n",
       "F      88    88       64\n",
       "G       5    98       87\n",
       "H      40    60        4\n",
       "I      46    97       75\n",
       "J      90    27       35"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(10, 3)),\n",
    "                  index=list('ABCDEFGHIJ'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "2f09207d-9dd4-400c-8964-7e65d6dbf267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>5</td>\n",
       "      <td>98</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>18</td>\n",
       "      <td>50</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>88</td>\n",
       "      <td>88</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>40</td>\n",
       "      <td>60</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>34</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>30</td>\n",
       "      <td>16</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>13</td>\n",
       "      <td>23</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>66</td>\n",
       "      <td>16</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>46</td>\n",
       "      <td>97</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>90</td>\n",
       "      <td>27</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "G       5    98       87\n",
       "A      18    50       38\n",
       "F      88    88       64\n",
       "H      40    60        4\n",
       "E      34     2       60\n",
       "C      30    16       69\n",
       "B      13    23       66\n",
       "D      66    16       34\n",
       "I      46    97       75\n",
       "J      90    27       35"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机排列 0-9 这 10 个数字\n",
    "idx = np.random.permutation(10)\n",
    "\n",
    "# 重排\n",
    "df.take(idx)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b2e9ec4-088e-4c65-b7c1-f6da3216abeb",
   "metadata": {},
   "source": [
    "**随机抽样**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "89fa7b5d-6b81-4f84-bb49-488db69c8ce3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5, 7, 0, 6, 8])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>88</td>\n",
       "      <td>88</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>40</td>\n",
       "      <td>60</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>18</td>\n",
       "      <td>50</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>5</td>\n",
       "      <td>98</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>46</td>\n",
       "      <td>97</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "F      88    88       64\n",
       "H      40    60        4\n",
       "A      18    50       38\n",
       "G       5    98       87\n",
       "I      46    97       75"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 得到 5 个随机数，范围是 0-9\n",
    "idx = np.random.randint(0, 10, size=5)\n",
    "display(idx)\n",
    "\n",
    "# 根据生成的随机数进行抽样。结果可能重复\n",
    "df.take(idx)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0916aa06-0143-4192-b3c3-a3d8d3a0c28c",
   "metadata": {},
   "source": [
    "**哑变量**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "fb6f5df5-f43d-40a5-8aaa-3750a7d9b51c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key\n",
       "0   b\n",
       "1   b\n",
       "2   a\n",
       "3   c\n",
       "4   a\n",
       "5   b"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'key': ['b', 'b', 'a', 'c', 'a', 'b']\n",
    "})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "7aed4094-d741-4ddd-835c-8d51d0a63d03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       a      b      c\n",
       "0  False   True  False\n",
       "1  False   True  False\n",
       "2   True  False  False\n",
       "3  False  False   True\n",
       "4   True  False  False\n",
       "5  False   True  False"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.get_dummies(df, prefix='', prefix_sep='')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25ce2595-351c-41bb-992f-71d1d3debadb",
   "metadata": {},
   "source": [
    "**独热编码**：给定一串编码，其中只有一个为真或1，其余都为假或0\n",
    "- 表示 b：(0, 1, 0)\n",
    "- 表示 a：(1, 0, 0)\n",
    "- 表示 a：(0, 0, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ad9d035-76ea-4840-b805-ec779416c2cd",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 练习 2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df92d85b-d847-444b-999f-ef04c68274a4",
   "metadata": {},
   "source": [
    "### No.1\n",
    "\n",
    "体测成绩.xlsx 中的【男生】工作表\n",
    "\n",
    "1. 数据清理\n",
    "2. 【男1000米跑】字段类型转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "e611e045-1d96-40c7-b253-187911f0c62f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Kim大学体能极限是1km3分34秒！\n"
     ]
    }
   ],
   "source": [
    "s = '我大学体能极限是1km3分34秒！'\n",
    "print(s.replace('我', 'Kim'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "594d5593-be5c-4ec3-9dea-9429ad2c367a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.12\n"
     ]
    }
   ],
   "source": [
    "s = \"4'12\"\n",
    "n = s.replace(\"\\'\", '.')\n",
    "print(float(n))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "60c0c27c-8d0b-4530-b517-1ff17b48af15",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "#查看变量数据类型\n",
    "var = '5.12'\n",
    "print(isinstance(var, str))\n",
    "\n",
    "var = 4.1235\n",
    "print(isinstance(var, str))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e5cfb31-c6f1-41d0-9fe9-ae9b286a00d7",
   "metadata": {},
   "source": [
    "**处理数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "fad09ef5-8cd5-4b25-8e51-b38541ed653f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5'19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4'12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4'17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4'19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18    5'19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27    4'12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13    4'17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36    4'19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40     NaN   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_boys = pd.read_excel('体测成绩.xlsx', sheet_name=0, header=0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "e68746a7-356e-47d2-b95e-739f0cef021d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5'19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4'12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4'17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4'19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18    5'19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27    4'12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13    4'17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36    4'19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40       0   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全局空数据填写为 0\n",
    "df_boys = df_boys.fillna(0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "a774ff20-79c7-4bb4-9a46-6d4aa40a0a45",
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_time_to_float(s):\n",
    "    if isinstance(s, str):\n",
    "        n = s.replace(\"\\'\", '.')\n",
    "        return float(n)\n",
    "    else:\n",
    "        return s\n",
    "\n",
    "df_boys['男1000米跑'] = df_boys['男1000米跑'].transform(convert_time_to_float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "218f66fd-cd9f-4953-825e-cbf7f1fcac3a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3458.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4539.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6059.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑    男跳远  男体前屈   男引体    男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210.0  15.0   6.0  7042.0\n",
       "1  男  苏*飞27     4.12   8.60  215.0  15.0  11.0  3458.0\n",
       "2  男  寻*潇13     4.17   8.16  215.0  14.0   4.0  4336.0\n",
       "3  男  郭*冉36     4.19   8.96  205.0  14.0   0.0  4539.0\n",
       "4  男  王*磊40     0.00   8.30  230.0  14.0   9.0  6059.0"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "9a792e14-f009-4114-a160-fc0be1e515be",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_boys.to_excel('体测成绩_男生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "45206036-cc38-4fa0-99dd-2a03c040bc01",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210    15    6  7042\n",
       "1  男  苏*飞27     4.12   8.60  215    15   11  3458\n",
       "2  男  寻*潇13     4.17   8.16  215    14    4  4336\n",
       "3  男  郭*冉36     4.19   8.96  205    14    0  4539\n",
       "4  男  王*磊40     0.00   8.30  230    14    9  6059"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('体测成绩_男生_处理.xlsx', index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1cb0eb2-3032-4651-800e-42a65145cb28",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.2\n",
    "\n",
    "体测成绩.xlsx 中的【女生】工作表\n",
    "\n",
    "1. 数据清理\n",
    "2. 【女800米跑】字段类型转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "442b1b91-673b-4035-b24a-c0f214d6e551",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3'55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3'29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3'36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3'49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名 女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6      4   9.92  172    23   40  2348\n",
       "1  女  吕*璇40   3'55  10.94  160    14   39  2588\n",
       "2  女  任*哲30   3'29   8.79  150    17   36  3043\n",
       "3  女  李*琦13   3'36  10.16  167    13   41  3276\n",
       "4  女  高*润32   3'49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_girls = pd.read_excel('体测成绩.xlsx', sheet_name=1, header=0)\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "c19083ee-0c1e-48ee-8fe0-8d170e9753ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00   9.92  172    23   40  2348\n",
       "1  女  吕*璇40    3.55  10.94  160    14   39  2588\n",
       "2  女  任*哲30    3.29   8.79  150    17   36  3043\n",
       "3  女  李*琦13    3.36  10.16  167    13   41  3276\n",
       "4  女  高*润32    3.49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全局空数据填写为 0\n",
    "df_girls = df_girls.fillna(0)\n",
    "\n",
    "def convert_time_to_float(s):\n",
    "    if isinstance(s, str):\n",
    "        n = s.replace(\"\\'\", '.')\n",
    "        return float(n)\n",
    "    else:\n",
    "        return s\n",
    "\n",
    "df_girls['女800米跑'] = df_girls['女800米跑'].transform(convert_time_to_float)\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "fa82acc8-663e-491c-8b5a-e70ac98edc6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_girls.to_excel('体测成绩_女生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "dd821652-8977-41a3-90d8-078200412652",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>9.92</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>10.94</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>8.79</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>10.16</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>9.99</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女50米跑  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00   9.92  172    23   40  2348\n",
       "1  女  吕*璇40    3.55  10.94  160    14   39  2588\n",
       "2  女  任*哲30    3.29   8.79  150    17   36  3043\n",
       "3  女  李*琦13    3.36  10.16  167    13   41  3276\n",
       "4  女  高*润32    3.49   9.99  160    10   40  2410"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('体测成绩_女生_处理.xlsx', index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8bc46fc8-f49c-43b4-a527-f9464c8cd155",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.3\n",
    "\n",
    "体测成绩评分表.xlsx\n",
    "\n",
    "1. 数据清理\n",
    "2. 数据转换\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "4e5dd933-9950-4f6b-bcc1-551e51ca5c51",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3'30\"</td>\n",
       "      <td>100</td>\n",
       "      <td>3'24\"</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3'35\"</td>\n",
       "      <td>95</td>\n",
       "      <td>3'30\"</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3'40\"</td>\n",
       "      <td>90</td>\n",
       "      <td>3'36\"</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3'47\"</td>\n",
       "      <td>85</td>\n",
       "      <td>3'43\"</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3'55\"</td>\n",
       "      <td>80</td>\n",
       "      <td>3'50\"</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100   3'30\"  100  3'24\"  100  \n",
       "1   95  51   95   3'35\"   95  3'30\"   95  \n",
       "2   90  49   90   3'40\"   90  3'36\"   90  \n",
       "3   85  46   85   3'47\"   85  3'43\"   85  \n",
       "4   80  43   80   3'55\"   80  3'50\"   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# header：指定第一行和第二行用作列索引\n",
    "df_pfb = pd.read_excel('体测成绩评分表.xlsx', sheet_name=0, header=[0, 1])\n",
    "\n",
    "df_pfb.fillna(0)\n",
    "\n",
    "df_pfb.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "65963846-2ebd-417d-b0ef-b1943b02f71c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def convert(x):\n",
    "    if isinstance(x, str):\n",
    "        return x.replace(\"\\'\", '.').replace('\\\"', '')\n",
    "    else:\n",
    "        return x\n",
    "\n",
    "#男1000米跑-成绩\n",
    "df_pfb.iloc[:, -4] = df_pfb.iloc[:, -4].apply(convert)\n",
    "\n",
    "#女800米跑-成绩\n",
    "df_pfb.iloc[:, -2] = df_pfb.iloc[:, -2].apply(convert)\n",
    "\n",
    "df_pfb.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "4d90c079-31c4-4f53-b460-372008bd5857",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 指定 header 表示将第一行和第二行作为索引\n",
    "df_pfb.to_excel('./体测成绩评分表_处理.xlsx', header=[0, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "24f06ca0-1dc3-4727-bd9a-9981d14e49f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定 index_col 为 0 表示用第 1 列作为行索引\n",
    "pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccb7788e-d2e9-48f8-9efc-65a1c3ed011e",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13a63813-8c25-4f71-a2fe-9865ba12d1d4",
   "metadata": {},
   "source": [
    "#### 男生数据\n",
    "\n",
    "1. 将男生体测成绩转为分数，将运动类型分为速度型和力量型单独计算\n",
    "2. 持久化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "7964cf17-0505-4fbf-9a0e-1285161aeda4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>9.55</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>8.60</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>8.16</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>8.96</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>8.30</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男50米跑  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19   9.55  210    15    6  7042\n",
       "1  男  苏*飞27     4.12   8.60  215    15   11  3458\n",
       "2  男  寻*潇13     4.17   8.16  215    14    4  4336\n",
       "3  男  郭*冉36     4.19   8.96  205    14    0  4539\n",
       "4  男  王*磊40     0.00   8.30  230    14    9  6059"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取 1. 中处理后导出的数据\n",
    "df_boys = pd.read_excel('体测成绩_男生_处理.xlsx', index_col=0)\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "c9bce472-6709-4b05-a2df-ff9d02940b0a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">男肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女肺活量</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女50米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男体前屈</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女跳远</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男引体</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女仰卧</th>\n",
       "      <th colspan=\"2\" halign=\"left\">男1000米跑</th>\n",
       "      <th colspan=\"2\" halign=\"left\">女800米跑</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>...</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "      <th>成绩</th>\n",
       "      <th>分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4540</td>\n",
       "      <td>100</td>\n",
       "      <td>3150</td>\n",
       "      <td>100</td>\n",
       "      <td>7.1</td>\n",
       "      <td>100</td>\n",
       "      <td>7.8</td>\n",
       "      <td>100</td>\n",
       "      <td>23.6</td>\n",
       "      <td>100</td>\n",
       "      <td>...</td>\n",
       "      <td>204</td>\n",
       "      <td>100</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100</td>\n",
       "      <td>53</td>\n",
       "      <td>100</td>\n",
       "      <td>3.30</td>\n",
       "      <td>100</td>\n",
       "      <td>3.24</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4420</td>\n",
       "      <td>95</td>\n",
       "      <td>3100</td>\n",
       "      <td>95</td>\n",
       "      <td>7.2</td>\n",
       "      <td>95</td>\n",
       "      <td>7.9</td>\n",
       "      <td>95</td>\n",
       "      <td>21.5</td>\n",
       "      <td>95</td>\n",
       "      <td>...</td>\n",
       "      <td>198</td>\n",
       "      <td>95</td>\n",
       "      <td>15.0</td>\n",
       "      <td>95</td>\n",
       "      <td>51</td>\n",
       "      <td>95</td>\n",
       "      <td>3.35</td>\n",
       "      <td>95</td>\n",
       "      <td>3.30</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4300</td>\n",
       "      <td>90</td>\n",
       "      <td>3050</td>\n",
       "      <td>90</td>\n",
       "      <td>7.3</td>\n",
       "      <td>90</td>\n",
       "      <td>8.0</td>\n",
       "      <td>90</td>\n",
       "      <td>19.4</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>90</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90</td>\n",
       "      <td>49</td>\n",
       "      <td>90</td>\n",
       "      <td>3.40</td>\n",
       "      <td>90</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4050</td>\n",
       "      <td>85</td>\n",
       "      <td>2900</td>\n",
       "      <td>85</td>\n",
       "      <td>7.4</td>\n",
       "      <td>85</td>\n",
       "      <td>8.3</td>\n",
       "      <td>85</td>\n",
       "      <td>17.2</td>\n",
       "      <td>85</td>\n",
       "      <td>...</td>\n",
       "      <td>185</td>\n",
       "      <td>85</td>\n",
       "      <td>13.0</td>\n",
       "      <td>85</td>\n",
       "      <td>46</td>\n",
       "      <td>85</td>\n",
       "      <td>3.47</td>\n",
       "      <td>85</td>\n",
       "      <td>3.43</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3800</td>\n",
       "      <td>80</td>\n",
       "      <td>2750</td>\n",
       "      <td>80</td>\n",
       "      <td>7.5</td>\n",
       "      <td>80</td>\n",
       "      <td>8.6</td>\n",
       "      <td>80</td>\n",
       "      <td>15.0</td>\n",
       "      <td>80</td>\n",
       "      <td>...</td>\n",
       "      <td>178</td>\n",
       "      <td>80</td>\n",
       "      <td>12.0</td>\n",
       "      <td>80</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "      <td>3.55</td>\n",
       "      <td>80</td>\n",
       "      <td>3.50</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   男肺活量       女肺活量      男50米跑      女50米跑       男体前屈       ...  女跳远        男引体  \\\n",
       "     成绩   分数    成绩   分数    成绩   分数    成绩   分数    成绩   分数  ...   成绩   分数    成绩   \n",
       "0  4540  100  3150  100   7.1  100   7.8  100  23.6  100  ...  204  100  16.0   \n",
       "1  4420   95  3100   95   7.2   95   7.9   95  21.5   95  ...  198   95  15.0   \n",
       "2  4300   90  3050   90   7.3   90   8.0   90  19.4   90  ...  192   90  14.0   \n",
       "3  4050   85  2900   85   7.4   85   8.3   85  17.2   85  ...  185   85  13.0   \n",
       "4  3800   80  2750   80   7.5   80   8.6   80  15.0   80  ...  178   80  12.0   \n",
       "\n",
       "       女仰卧      男1000米跑      女800米跑       \n",
       "    分数  成绩   分数      成绩   分数     成绩   分数  \n",
       "0  100  53  100    3.30  100   3.24  100  \n",
       "1   95  51   95    3.35   95   3.30   95  \n",
       "2   90  49   90    3.40   90   3.36   90  \n",
       "3   85  46   85    3.47   85   3.43   85  \n",
       "4   80  43   80    3.55   80   3.50   80  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加载处理后的评分表\n",
    "df_pfb2 = pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0)\n",
    "df_pfb2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "6ac59729-8934-464b-b790-467309bc102f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.62 s, sys: 0 ns, total: 3.62 s\n",
      "Wall time: 3.62 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0       40\n",
       "1       72\n",
       "2       70\n",
       "3       70\n",
       "4        0\n",
       "        ..\n",
       "1080    76\n",
       "1081    80\n",
       "1082    50\n",
       "1083    66\n",
       "1084    70\n",
       "Name: 男1000米跑, Length: 1085, dtype: int64"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "def convert(x):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2['男1000米跑']['成绩'][i]:\n",
    "            return df_pfb2['男1000米跑']['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "df_boys['男1000米跑'].apply(convert)\n",
    "\n",
    "# 直接插入最后一列\n",
    "#df_boys['男1000米跑分数'] = df_boys['男1000米跑'].apply(convert)\n",
    "#df_boys.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9919f72c-b946-4c2d-ae81-70083a399fc1",
   "metadata": {},
   "source": [
    "**通用写法**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "d0853692-0211-4e07-9151-073f6a6115c8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.39 s, sys: 103 ms, total: 7.5 s\n",
      "Wall time: 7.47 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男1000米跑分数</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男50米跑分数</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>40</td>\n",
       "      <td>9.55</td>\n",
       "      <td>50</td>\n",
       "      <td>210</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>7042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>72</td>\n",
       "      <td>8.60</td>\n",
       "      <td>68</td>\n",
       "      <td>215</td>\n",
       "      <td>15</td>\n",
       "      <td>11</td>\n",
       "      <td>3458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>70</td>\n",
       "      <td>8.16</td>\n",
       "      <td>72</td>\n",
       "      <td>215</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "      <td>4336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>70</td>\n",
       "      <td>8.96</td>\n",
       "      <td>64</td>\n",
       "      <td>205</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>72</td>\n",
       "      <td>230</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>6059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男1000米跑分数  男50米跑  男50米跑分数  男跳远  男体前屈  男引体  男肺活量\n",
       "0  男  郭*森18     5.19         40   9.55       50  210    15    6  7042\n",
       "1  男  苏*飞27     4.12         72   8.60       68  215    15   11  3458\n",
       "2  男  寻*潇13     4.17         70   8.16       72  215    14    4  4336\n",
       "3  男  郭*冉36     4.19         70   8.96       64  205    14    0  4539\n",
       "4  男  王*磊40     0.00          0   8.30       72  230    14    9  6059"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "cols = ['男1000米跑', '男50米跑']\n",
    "\n",
    "def convert(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_boys[col].apply(convert, args=(col,))\n",
    "    col_idx = list(df_boys.columns).index(col) + 1\n",
    "    df_boys.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f05eaf04-f6b8-4885-8307-379ec8ba7c37",
   "metadata": {},
   "source": [
    "**力量型运动转换**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "78c94153-4cf3-4f83-9af0-e5a8f4a1758a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 14.8 s, sys: 117 ms, total: 14.9 s\n",
      "Wall time: 14.9 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>男1000米跑分数</th>\n",
       "      <th>男50米跑</th>\n",
       "      <th>男50米跑分数</th>\n",
       "      <th>男跳远</th>\n",
       "      <th>男跳远分数</th>\n",
       "      <th>男体前屈</th>\n",
       "      <th>男体前屈分数</th>\n",
       "      <th>男引体</th>\n",
       "      <th>男引体分数</th>\n",
       "      <th>男肺活量</th>\n",
       "      <th>男肺活量分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*森18</td>\n",
       "      <td>5.19</td>\n",
       "      <td>40</td>\n",
       "      <td>9.55</td>\n",
       "      <td>50</td>\n",
       "      <td>210</td>\n",
       "      <td>66</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>6</td>\n",
       "      <td>50</td>\n",
       "      <td>7042</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>苏*飞27</td>\n",
       "      <td>4.12</td>\n",
       "      <td>72</td>\n",
       "      <td>8.60</td>\n",
       "      <td>68</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>15</td>\n",
       "      <td>80</td>\n",
       "      <td>11</td>\n",
       "      <td>76</td>\n",
       "      <td>3458</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>男</td>\n",
       "      <td>寻*潇13</td>\n",
       "      <td>4.17</td>\n",
       "      <td>70</td>\n",
       "      <td>8.16</td>\n",
       "      <td>72</td>\n",
       "      <td>215</td>\n",
       "      <td>70</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>4</td>\n",
       "      <td>30</td>\n",
       "      <td>4336</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>郭*冉36</td>\n",
       "      <td>4.19</td>\n",
       "      <td>70</td>\n",
       "      <td>8.96</td>\n",
       "      <td>64</td>\n",
       "      <td>205</td>\n",
       "      <td>64</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4539</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>王*磊40</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>8.30</td>\n",
       "      <td>72</td>\n",
       "      <td>230</td>\n",
       "      <td>76</td>\n",
       "      <td>14</td>\n",
       "      <td>78</td>\n",
       "      <td>9</td>\n",
       "      <td>68</td>\n",
       "      <td>6059</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  男1000米跑  男1000米跑分数  男50米跑  男50米跑分数  男跳远  男跳远分数  男体前屈  男体前屈分数  \\\n",
       "0  男  郭*森18     5.19         40   9.55       50  210     66    15      80   \n",
       "1  男  苏*飞27     4.12         72   8.60       68  215     70    15      80   \n",
       "2  男  寻*潇13     4.17         70   8.16       72  215     70    14      78   \n",
       "3  男  郭*冉36     4.19         70   8.96       64  205     64    14      78   \n",
       "4  男  王*磊40     0.00          0   8.30       72  230     76    14      78   \n",
       "\n",
       "   男引体  男引体分数  男肺活量  男肺活量分数  \n",
       "0    6     50  7042     100  \n",
       "1   11     76  3458      74  \n",
       "2    4     30  4336      90  \n",
       "3    0      0  4539      95  \n",
       "4    9     68  6059     100  "
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "cols = ['男跳远', '男体前屈', '男引体', '男肺活量']\n",
    "\n",
    "def convert2(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x >= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_boys[col].apply(convert2, args=(col,))\n",
    "    col_idx = list(df_boys.columns).index(col) + 1\n",
    "    df_boys.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_boys.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "a654c3ee-b5fe-4a30-84bb-8590c20f9726",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_boys.to_excel('体测分数_男生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ccf5b2b-5945-4a2b-b7b7-b0d1967620e7",
   "metadata": {},
   "source": [
    "#### 女生数据\n",
    "\n",
    "1. 将女生体测成绩转为分数，将运动类型分为速度型和力量型单独计算\n",
    "2. 持久化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "c6474d5c-a121-4f37-a5e2-512a7f156a3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女800米跑分数</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女50米跑分数</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女肺活量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>76</td>\n",
       "      <td>9.92</td>\n",
       "      <td>66</td>\n",
       "      <td>172</td>\n",
       "      <td>23</td>\n",
       "      <td>40</td>\n",
       "      <td>2348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>78</td>\n",
       "      <td>10.94</td>\n",
       "      <td>40</td>\n",
       "      <td>160</td>\n",
       "      <td>14</td>\n",
       "      <td>39</td>\n",
       "      <td>2588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>95</td>\n",
       "      <td>8.79</td>\n",
       "      <td>78</td>\n",
       "      <td>150</td>\n",
       "      <td>17</td>\n",
       "      <td>36</td>\n",
       "      <td>3043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "      <td>10.16</td>\n",
       "      <td>64</td>\n",
       "      <td>167</td>\n",
       "      <td>13</td>\n",
       "      <td>41</td>\n",
       "      <td>3276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>80</td>\n",
       "      <td>9.99</td>\n",
       "      <td>66</td>\n",
       "      <td>160</td>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "      <td>2410</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女800米跑分数  女50米跑  女50米跑分数  女跳远  女体前屈  女仰卧  女肺活量\n",
       "0  女   李*帆6    4.00        76   9.92       66  172    23   40  2348\n",
       "1  女  吕*璇40    3.55        78  10.94       40  160    14   39  2588\n",
       "2  女  任*哲30    3.29        95   8.79       78  150    17   36  3043\n",
       "3  女  李*琦13    3.36        90  10.16       64  167    13   41  3276\n",
       "4  女  高*润32    3.49        80   9.99       66  160    10   40  2410"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取 1. 中处理后导出的数据\n",
    "df_girls = pd.read_excel('体测成绩_女生_处理.xlsx', index_col=0)\n",
    "\n",
    "# 加载处理后的评分表\n",
    "df_pfb2 = pd.read_excel('./体测成绩评分表_处理.xlsx', header=[0, 1], index_col=0)\n",
    "\n",
    "#----------速度型运动成绩转换---------------\n",
    "\n",
    "cols = ['女800米跑', '女50米跑']\n",
    "def convert(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x <= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_girls[col].apply(convert, args=(col,))\n",
    "    col_idx = list(df_girls.columns).index(col) + 1\n",
    "    df_girls.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "b47a7565-3253-467c-81e5-a90ab2d740bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>女800米跑</th>\n",
       "      <th>女800米跑分数</th>\n",
       "      <th>女50米跑</th>\n",
       "      <th>女50米跑分数</th>\n",
       "      <th>女跳远</th>\n",
       "      <th>女跳远分数</th>\n",
       "      <th>女体前屈</th>\n",
       "      <th>女体前屈分数</th>\n",
       "      <th>女仰卧</th>\n",
       "      <th>女仰卧分数</th>\n",
       "      <th>女肺活量</th>\n",
       "      <th>女肺活量分数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>李*帆6</td>\n",
       "      <td>4.00</td>\n",
       "      <td>76</td>\n",
       "      <td>9.92</td>\n",
       "      <td>66</td>\n",
       "      <td>172</td>\n",
       "      <td>76</td>\n",
       "      <td>23</td>\n",
       "      <td>95</td>\n",
       "      <td>40</td>\n",
       "      <td>76</td>\n",
       "      <td>2348</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>女</td>\n",
       "      <td>吕*璇40</td>\n",
       "      <td>3.55</td>\n",
       "      <td>78</td>\n",
       "      <td>10.94</td>\n",
       "      <td>40</td>\n",
       "      <td>160</td>\n",
       "      <td>68</td>\n",
       "      <td>14</td>\n",
       "      <td>74</td>\n",
       "      <td>39</td>\n",
       "      <td>76</td>\n",
       "      <td>2588</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>任*哲30</td>\n",
       "      <td>3.29</td>\n",
       "      <td>95</td>\n",
       "      <td>8.79</td>\n",
       "      <td>78</td>\n",
       "      <td>150</td>\n",
       "      <td>60</td>\n",
       "      <td>17</td>\n",
       "      <td>78</td>\n",
       "      <td>36</td>\n",
       "      <td>72</td>\n",
       "      <td>3043</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>女</td>\n",
       "      <td>李*琦13</td>\n",
       "      <td>3.36</td>\n",
       "      <td>90</td>\n",
       "      <td>10.16</td>\n",
       "      <td>64</td>\n",
       "      <td>167</td>\n",
       "      <td>72</td>\n",
       "      <td>13</td>\n",
       "      <td>72</td>\n",
       "      <td>41</td>\n",
       "      <td>78</td>\n",
       "      <td>3276</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>女</td>\n",
       "      <td>高*润32</td>\n",
       "      <td>3.49</td>\n",
       "      <td>80</td>\n",
       "      <td>9.99</td>\n",
       "      <td>66</td>\n",
       "      <td>160</td>\n",
       "      <td>68</td>\n",
       "      <td>10</td>\n",
       "      <td>68</td>\n",
       "      <td>40</td>\n",
       "      <td>76</td>\n",
       "      <td>2410</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  性别     姓名  女800米跑  女800米跑分数  女50米跑  女50米跑分数  女跳远  女跳远分数  女体前屈  女体前屈分数  女仰卧  \\\n",
       "0  女   李*帆6    4.00        76   9.92       66  172     76    23      95   40   \n",
       "1  女  吕*璇40    3.55        78  10.94       40  160     68    14      74   39   \n",
       "2  女  任*哲30    3.29        95   8.79       78  150     60    17      78   36   \n",
       "3  女  李*琦13    3.36        90  10.16       64  167     72    13      72   41   \n",
       "4  女  高*润32    3.49        80   9.99       66  160     68    10      68   40   \n",
       "\n",
       "   女仰卧分数  女肺活量  女肺活量分数  \n",
       "0     76  2348      70  \n",
       "1     76  2588      76  \n",
       "2     72  3043      85  \n",
       "3     78  3276     100  \n",
       "4     76  2410      72  "
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----------力量型运动成绩转换---------------\n",
    "cols = ['女跳远', '女体前屈', '女仰卧', '女肺活量']\n",
    "\n",
    "def convert2(x, col):\n",
    "    if x == 0: # 没参加考试\n",
    "        return 0\n",
    "    for i in range(20): # 20 个成绩等级\n",
    "        if x >= df_pfb2[col]['成绩'][i]:\n",
    "            return df_pfb2[col]['分数'][i]\n",
    "    return 0 # 跑的太慢了，超出了所有等级，视作无效\n",
    "\n",
    "for col in cols:\n",
    "    s = df_girls[col].apply(convert2, args=(col,))\n",
    "    col_idx = list(df_girls.columns).index(col) + 1\n",
    "    df_girls.insert(loc=col_idx, column=col+'分数', value=s)\n",
    "\n",
    "df_girls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "cddd90e9-1c15-4e89-82a5-8a6e1f40e222",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_girls.to_excel('体测分数_女生_处理.xlsx', header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "93919dda-4911-4ac1-a187-01fc235baff1",
   "metadata": {},
   "outputs": [],
   "source": [
    "with pd.ExcelWriter('体测分数_男生_女生_处理.xlsx') as w:\n",
    "    df_boys.to_excel(w, sheet_name='男生', index=False)\n",
    "    df_girls.to_excel(w, sheet_name='女生', index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca85eab5-a51b-423b-8b86-262c6d4d1543",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据重塑"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ca78728-0dde-4f17-9793-32fff7bec1ee",
   "metadata": {},
   "source": [
    "### 转置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "9ee34aaa-1f44-45dc-a7b7-8739f9a83d23",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>74</td>\n",
       "      <td>34</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>128</td>\n",
       "      <td>98</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>84</td>\n",
       "      <td>129</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>41</td>\n",
       "      <td>14</td>\n",
       "      <td>52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>74</td>\n",
       "      <td>44</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>80</td>\n",
       "      <td>53</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>121</td>\n",
       "      <td>49</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>92</td>\n",
       "      <td>72</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>136</td>\n",
       "      <td>76</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>67</td>\n",
       "      <td>114</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pytorch  Tensorflow  Keras\n",
       "A       74          34    110\n",
       "B      128          98    106\n",
       "C       84         129     42\n",
       "D       41          14     52\n",
       "E       74          44      2\n",
       "F       80          53     45\n",
       "G      121          49     43\n",
       "H       92          72     19\n",
       "I      136          76     83\n",
       "J       67         114     64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Pytorch</th>\n",
       "      <td>74</td>\n",
       "      <td>128</td>\n",
       "      <td>84</td>\n",
       "      <td>41</td>\n",
       "      <td>74</td>\n",
       "      <td>80</td>\n",
       "      <td>121</td>\n",
       "      <td>92</td>\n",
       "      <td>136</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tensorflow</th>\n",
       "      <td>34</td>\n",
       "      <td>98</td>\n",
       "      <td>129</td>\n",
       "      <td>14</td>\n",
       "      <td>44</td>\n",
       "      <td>53</td>\n",
       "      <td>49</td>\n",
       "      <td>72</td>\n",
       "      <td>76</td>\n",
       "      <td>114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>110</td>\n",
       "      <td>106</td>\n",
       "      <td>42</td>\n",
       "      <td>52</td>\n",
       "      <td>2</td>\n",
       "      <td>45</td>\n",
       "      <td>43</td>\n",
       "      <td>19</td>\n",
       "      <td>83</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A    B    C   D   E   F    G   H    I    J\n",
       "Pytorch      74  128   84  41  74  80  121  92  136   67\n",
       "Tensorflow   34   98  129  14  44  53   49  72   76  114\n",
       "Keras       110  106   42  52   2  45   43  19   83   64"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 150, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "display(df)\n",
    "\n",
    "# 转置\n",
    "df.T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54ceca4c-f943-473c-a8bd-b6b8b29e7453",
   "metadata": {},
   "source": [
    "### 多层索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "a7984a8d-e587-4ebf-b9b0-4e0f8e9887c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A</th>\n",
       "      <th>上</th>\n",
       "      <td>80</td>\n",
       "      <td>41</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>9</td>\n",
       "      <td>90</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B</th>\n",
       "      <th>上</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>64</td>\n",
       "      <td>70</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C</th>\n",
       "      <th>上</th>\n",
       "      <td>65</td>\n",
       "      <td>47</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>58</td>\n",
       "      <td>44</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D</th>\n",
       "      <th>上</th>\n",
       "      <td>55</td>\n",
       "      <td>94</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>89</td>\n",
       "      <td>18</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">E</th>\n",
       "      <th>上</th>\n",
       "      <td>22</td>\n",
       "      <td>56</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>97</td>\n",
       "      <td>36</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">F</th>\n",
       "      <th>上</th>\n",
       "      <td>80</td>\n",
       "      <td>62</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>17</td>\n",
       "      <td>73</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">G</th>\n",
       "      <th>上</th>\n",
       "      <td>26</td>\n",
       "      <td>42</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>45</td>\n",
       "      <td>77</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">H</th>\n",
       "      <th>上</th>\n",
       "      <td>20</td>\n",
       "      <td>75</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>94</td>\n",
       "      <td>18</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">I</th>\n",
       "      <th>上</th>\n",
       "      <td>45</td>\n",
       "      <td>33</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>59</td>\n",
       "      <td>95</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">J</th>\n",
       "      <th>上</th>\n",
       "      <td>84</td>\n",
       "      <td>84</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>26</td>\n",
       "      <td>72</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Pytorch  Tensorflow  Keras\n",
       "A 上       80          41      7\n",
       "  下        9          90     28\n",
       "B 上       10          13     73\n",
       "  下       64          70     40\n",
       "C 上       65          47     97\n",
       "  下       58          44     16\n",
       "D 上       55          94     44\n",
       "  下       89          18     50\n",
       "E 上       22          56     25\n",
       "  下       97          36     63\n",
       "F 上       80          62     62\n",
       "  下       17          73      3\n",
       "G 上       26          42     79\n",
       "  下       45          77     95\n",
       "H 上       20          75     12\n",
       "  下       94          18     23\n",
       "I 上       45          33     45\n",
       "  下       59          95     43\n",
       "J 上       84          84     28\n",
       "  下       26          72      9"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20, 3)),\n",
    "                   # ([第一层索引，第二层索引])，二者个数乘积是行数\n",
    "                   index=pd.MultiIndex.from_product([list('ABCDEFGHIJ'), ['上', '下']]),\n",
    "                   columns=['Pytorch', 'Tensorflow', 'Keras'])\n",
    "\n",
    "# 两层行索引\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "e4d8ac3c-bd9d-454e-b260-e32a45234edf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pytorch</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "      <th>上</th>\n",
       "      <th>下</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>80</td>\n",
       "      <td>9</td>\n",
       "      <td>41</td>\n",
       "      <td>90</td>\n",
       "      <td>7</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>10</td>\n",
       "      <td>64</td>\n",
       "      <td>13</td>\n",
       "      <td>70</td>\n",
       "      <td>73</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>65</td>\n",
       "      <td>58</td>\n",
       "      <td>47</td>\n",
       "      <td>44</td>\n",
       "      <td>97</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>55</td>\n",
       "      <td>89</td>\n",
       "      <td>94</td>\n",
       "      <td>18</td>\n",
       "      <td>44</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>22</td>\n",
       "      <td>97</td>\n",
       "      <td>56</td>\n",
       "      <td>36</td>\n",
       "      <td>25</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>80</td>\n",
       "      <td>17</td>\n",
       "      <td>62</td>\n",
       "      <td>73</td>\n",
       "      <td>62</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>26</td>\n",
       "      <td>45</td>\n",
       "      <td>42</td>\n",
       "      <td>77</td>\n",
       "      <td>79</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>20</td>\n",
       "      <td>94</td>\n",
       "      <td>75</td>\n",
       "      <td>18</td>\n",
       "      <td>12</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>45</td>\n",
       "      <td>59</td>\n",
       "      <td>33</td>\n",
       "      <td>95</td>\n",
       "      <td>45</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>84</td>\n",
       "      <td>26</td>\n",
       "      <td>84</td>\n",
       "      <td>72</td>\n",
       "      <td>28</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch     Tensorflow     Keras    \n",
       "        上   下          上   下     上   下\n",
       "A      80   9         41  90     7  28\n",
       "B      10  64         13  70    73  40\n",
       "C      65  58         47  44    97  16\n",
       "D      55  89         94  18    44  50\n",
       "E      22  97         56  36    25  63\n",
       "F      80  17         62  73    62   3\n",
       "G      26  45         42  77    79  95\n",
       "H      20  94         75  18    12  23\n",
       "I      45  59         33  95    45  43\n",
       "J      84  26         84  72    28   9"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"10\" halign=\"left\">Pytorch</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"10\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "      <th>...</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>上</th>\n",
       "      <td>80</td>\n",
       "      <td>10</td>\n",
       "      <td>65</td>\n",
       "      <td>55</td>\n",
       "      <td>22</td>\n",
       "      <td>80</td>\n",
       "      <td>26</td>\n",
       "      <td>20</td>\n",
       "      <td>45</td>\n",
       "      <td>84</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>73</td>\n",
       "      <td>97</td>\n",
       "      <td>44</td>\n",
       "      <td>25</td>\n",
       "      <td>62</td>\n",
       "      <td>79</td>\n",
       "      <td>12</td>\n",
       "      <td>45</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>下</th>\n",
       "      <td>9</td>\n",
       "      <td>64</td>\n",
       "      <td>58</td>\n",
       "      <td>89</td>\n",
       "      <td>97</td>\n",
       "      <td>17</td>\n",
       "      <td>45</td>\n",
       "      <td>94</td>\n",
       "      <td>59</td>\n",
       "      <td>26</td>\n",
       "      <td>...</td>\n",
       "      <td>28</td>\n",
       "      <td>40</td>\n",
       "      <td>16</td>\n",
       "      <td>50</td>\n",
       "      <td>63</td>\n",
       "      <td>3</td>\n",
       "      <td>95</td>\n",
       "      <td>23</td>\n",
       "      <td>43</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 30 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch                                      ... Keras                      \\\n",
       "        A   B   C   D   E   F   G   H   I   J  ...     A   B   C   D   E   F   \n",
       "上      80  10  65  55  22  80  26  20  45  84  ...     7  73  97  44  25  62   \n",
       "下       9  64  58  89  97  17  45  94  59  26  ...    28  40  16  50  63   3   \n",
       "\n",
       "                   \n",
       "    G   H   I   J  \n",
       "上  79  12  45  28  \n",
       "下  95  23  43   9  \n",
       "\n",
       "[2 rows x 30 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# unstack：行索引变为列索引\n",
    "\n",
    "# 将第二级行索引变为第二级列索引，level=-1表示倒数第一级别索引，同为正数第二级别即level=1\n",
    "display(df.unstack(level = -1)) # level=-1为默认\n",
    "\n",
    "# 将第一级行索引变为第二级列索引\n",
    "display(df.unstack(level = 0)) # 或 level=-2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "b30db42c-123c-45bf-8090-e7f8d4a54822",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A  上    128\n",
       "   下    127\n",
       "B  上     96\n",
       "   下    174\n",
       "C  上    209\n",
       "   下    118\n",
       "D  上    193\n",
       "   下    157\n",
       "E  上    103\n",
       "   下    196\n",
       "F  上    204\n",
       "   下     93\n",
       "G  上    147\n",
       "   下    217\n",
       "H  上    107\n",
       "   下    135\n",
       "I  上    123\n",
       "   下    197\n",
       "J  上    196\n",
       "   下    107\n",
       "dtype: int64"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#运算\n",
    "df.sum(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8c3cb65-108f-4897-a802-386d552a3d47",
   "metadata": {},
   "source": [
    "**多级列索引**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "92aab2b6-6122-4d5b-9c79-ee702fdd0ea0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pytorch</th>\n",
       "      <th colspan=\"2\" halign=\"left\">English</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>31</td>\n",
       "      <td>74</td>\n",
       "      <td>69</td>\n",
       "      <td>43</td>\n",
       "      <td>11</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>27</td>\n",
       "      <td>15</td>\n",
       "      <td>21</td>\n",
       "      <td>77</td>\n",
       "      <td>0</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>75</td>\n",
       "      <td>41</td>\n",
       "      <td>26</td>\n",
       "      <td>63</td>\n",
       "      <td>90</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>89</td>\n",
       "      <td>23</td>\n",
       "      <td>64</td>\n",
       "      <td>63</td>\n",
       "      <td>3</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>11</td>\n",
       "      <td>38</td>\n",
       "      <td>54</td>\n",
       "      <td>62</td>\n",
       "      <td>80</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>3</td>\n",
       "      <td>27</td>\n",
       "      <td>94</td>\n",
       "      <td>24</td>\n",
       "      <td>97</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>31</td>\n",
       "      <td>19</td>\n",
       "      <td>29</td>\n",
       "      <td>65</td>\n",
       "      <td>23</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>90</td>\n",
       "      <td>5</td>\n",
       "      <td>38</td>\n",
       "      <td>96</td>\n",
       "      <td>40</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>72</td>\n",
       "      <td>95</td>\n",
       "      <td>27</td>\n",
       "      <td>43</td>\n",
       "      <td>85</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>48</td>\n",
       "      <td>63</td>\n",
       "      <td>16</td>\n",
       "      <td>13</td>\n",
       "      <td>99</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Pytorch     English     Keras    \n",
       "       期中  期末      期中  期末    期中  期末\n",
       "A      31  74      69  43    11  61\n",
       "B      27  15      21  77     0  72\n",
       "C      75  41      26  63    90  85\n",
       "D      89  23      64  63     3  70\n",
       "E      11  38      54  62    80  14\n",
       "F       3  27      94  24    97  57\n",
       "G      31  19      29  65    23  58\n",
       "H      90   5      38  96    40  96\n",
       "I      72  95      27  43    85  63\n",
       "J      48  63      16  13    99  96"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randint(0, 100, size=(10, 6)),\n",
    "                   # ([第一层索引，第二层索引])，二者个数乘积是行数\n",
    "                   index=list('ABCDEFGHIJ'),\n",
    "                   columns=pd.MultiIndex.from_product([['Pytorch', 'English', 'Keras'], \n",
    "                                                       ['期中', '期末']]))\n",
    "\n",
    "# 两层行索引\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "7ee65531-6d16-4970-ac4e-db5e5956ae7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Pytorch</th>\n",
       "      <th>English</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A</th>\n",
       "      <th>期中</th>\n",
       "      <td>31</td>\n",
       "      <td>69</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>74</td>\n",
       "      <td>43</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B</th>\n",
       "      <th>期中</th>\n",
       "      <td>27</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>15</td>\n",
       "      <td>77</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C</th>\n",
       "      <th>期中</th>\n",
       "      <td>75</td>\n",
       "      <td>26</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>41</td>\n",
       "      <td>63</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D</th>\n",
       "      <th>期中</th>\n",
       "      <td>89</td>\n",
       "      <td>64</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>23</td>\n",
       "      <td>63</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">E</th>\n",
       "      <th>期中</th>\n",
       "      <td>11</td>\n",
       "      <td>54</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>38</td>\n",
       "      <td>62</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">F</th>\n",
       "      <th>期中</th>\n",
       "      <td>3</td>\n",
       "      <td>94</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>27</td>\n",
       "      <td>24</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">G</th>\n",
       "      <th>期中</th>\n",
       "      <td>31</td>\n",
       "      <td>29</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>19</td>\n",
       "      <td>65</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">H</th>\n",
       "      <th>期中</th>\n",
       "      <td>90</td>\n",
       "      <td>38</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>5</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">I</th>\n",
       "      <th>期中</th>\n",
       "      <td>72</td>\n",
       "      <td>27</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>95</td>\n",
       "      <td>43</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">J</th>\n",
       "      <th>期中</th>\n",
       "      <td>48</td>\n",
       "      <td>16</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>63</td>\n",
       "      <td>13</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Pytorch  English  Keras\n",
       "A 期中       31       69     11\n",
       "  期末       74       43     61\n",
       "B 期中       27       21      0\n",
       "  期末       15       77     72\n",
       "C 期中       75       26     90\n",
       "  期末       41       63     85\n",
       "D 期中       89       64      3\n",
       "  期末       23       63     70\n",
       "E 期中       11       54     80\n",
       "  期末       38       62     14\n",
       "F 期中        3       94     97\n",
       "  期末       27       24     57\n",
       "G 期中       31       29     23\n",
       "  期末       19       65     58\n",
       "H 期中       90       38     40\n",
       "  期末        5       96     96\n",
       "I 期中       72       27     85\n",
       "  期末       95       43     63\n",
       "J 期中       48       16     99\n",
       "  期末       63       13     96"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">A</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>31</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>69</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>11</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">B</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>27</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>21</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>0</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">C</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>75</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>26</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>90</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">D</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>89</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>64</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>3</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">E</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>11</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>54</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>80</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">F</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>3</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>94</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>97</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">G</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>31</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>29</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>23</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">H</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>90</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>38</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>40</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">I</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>72</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>27</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>85</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">J</th>\n",
       "      <th>Pytorch</th>\n",
       "      <td>48</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>16</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>99</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           期中  期末\n",
       "A Pytorch  31  74\n",
       "  English  69  43\n",
       "  Keras    11  61\n",
       "B Pytorch  27  15\n",
       "  English  21  77\n",
       "  Keras     0  72\n",
       "C Pytorch  75  41\n",
       "  English  26  63\n",
       "  Keras    90  85\n",
       "D Pytorch  89  23\n",
       "  English  64  63\n",
       "  Keras     3  70\n",
       "E Pytorch  11  38\n",
       "  English  54  62\n",
       "  Keras    80  14\n",
       "F Pytorch   3  27\n",
       "  English  94  24\n",
       "  Keras    97  57\n",
       "G Pytorch  31  19\n",
       "  English  29  65\n",
       "  Keras    23  58\n",
       "H Pytorch  90   5\n",
       "  English  38  96\n",
       "  Keras    40  96\n",
       "I Pytorch  72  95\n",
       "  English  27  43\n",
       "  Keras    85  63\n",
       "J Pytorch  48  63\n",
       "  English  16  13\n",
       "  Keras    99  96"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# stack：列索引转为行索引\n",
    "\n",
    "#将第二级列索引转为第二级行索引\n",
    "display(df2.stack(future_stack=True, level=1))\n",
    "\n",
    "#将第一级列索引转为第二级行索引\n",
    "display(df2.stack(future_stack=True, level=0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "b7069bcf-41c5-4800-b9e4-095b0bccded8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pytorch  期中    477\n",
       "         期末    400\n",
       "English  期中    438\n",
       "         期末    549\n",
       "Keras    期中    528\n",
       "         期末    672\n",
       "dtype: int64"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#运算\n",
    "df2.sum(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "3c3d1202-a6a5-4803-baa4-fd66cc2a1eb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "31"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2['Pytorch', '期中']['A']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23bac5d7-5578-40b8-a177-cbfec9aa8ab3",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数学和统计方法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7861b3a3-d880-4ee3-9edd-75284b78815a",
   "metadata": {},
   "source": [
    "### 简单统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "c947e586-0270-4d44-b428-03c1d5646d5c",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "1c1c9c67-84e5-4985-96fa-126f10683abd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     18\n",
       "Math       17\n",
       "English    17\n",
       "dtype: int64"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Count non-NA cells for each column or row.\n",
    "df.count(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "274d077e-ce61-48d1-a15f-96f053d8648c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     90.0\n",
       "Math       90.0\n",
       "English    88.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the maximum of the values over the requested axis.\n",
    "df.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "dfa339fe-726d-40ed-a161-06adc41b86e5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     1.0\n",
       "Math       6.0\n",
       "English    0.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the minimum of the values over the requested axis.\n",
    "df.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "b6311ef6-f64f-4234-89ba-e918c910a725",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     851.0\n",
       "Math       945.0\n",
       "English    721.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "9ed2f96a-1cb8-4150-bed4-23a72256b9e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     47.277778\n",
       "Math       55.588235\n",
       "English    42.411765\n",
       "dtype: float64"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "688a9226-0acd-49d8-9fb5-3ea6354ba565",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     43.0\n",
       "Math       60.0\n",
       "English    19.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Return the median of the values over the requested axis.\n",
    "df.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "c6497091-36ea-47a8-8155-1217ae75d53a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     80.8\n",
       "Math       86.4\n",
       "English    79.6\n",
       "Name: 0.8, dtype: float64"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#返回请求轴上给定分位数的值\n",
    "df.quantile(q = 0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "3b274bbc-3898-4dd4-ae8f-70c17ea2e442",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>18.000000</td>\n",
       "      <td>17.000000</td>\n",
       "      <td>17.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>47.277778</td>\n",
       "      <td>55.588235</td>\n",
       "      <td>42.411765</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>30.657128</td>\n",
       "      <td>28.967781</td>\n",
       "      <td>34.928604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>22.750000</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>13.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>43.000000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>19.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>76.500000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>78.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>88.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python       Math    English\n",
       "count  18.000000  17.000000  17.000000\n",
       "mean   47.277778  55.588235  42.411765\n",
       "std    30.657128  28.967781  34.928604\n",
       "min     1.000000   6.000000   0.000000\n",
       "25%    22.750000  27.000000  13.000000\n",
       "50%    43.000000  60.000000  19.000000\n",
       "75%    76.500000  80.000000  78.000000\n",
       "max    90.000000  90.000000  88.000000"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c45a317-a12f-442d-a8aa-524d5d60af84",
   "metadata": {},
   "source": [
    "### 索引标签和位置获取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "ac3cbb51-b06b-46c1-aaf2-0fd18096c063",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "f63d7c73-85ad-4e0a-9187-177000306d7a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16\n",
      "1.0\n",
      "1.0\n"
     ]
    }
   ],
   "source": [
    "#最小值索引\n",
    "min_idx = df['Python'].argmin()\n",
    "print(min_idx)\n",
    "print(df['Python'].iloc[min_idx])\n",
    "\n",
    "print(df['Python'].min())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "835ce5ce-a1a8-458e-aecc-4432935853fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11\n",
      "88.0\n",
      "88.0\n"
     ]
    }
   ],
   "source": [
    "#最大值索引\n",
    "max_idx = df['Python'].argmax()\n",
    "print(max_idx)\n",
    "print(df['Python'].iloc[max_idx])\n",
    "\n",
    "print(df['Python'].max())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "8acc6134-2324-4ccf-bfcd-5cc60d268761",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "L\n",
      "88.0\n",
      "88.0\n"
     ]
    }
   ],
   "source": [
    "#最大值索引标签\n",
    "max_id = df['Python'].idxmax()\n",
    "print(max_id)\n",
    "print(df['Python'].loc[max_id])\n",
    "\n",
    "print(df['Python'].max())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "7882019e-b681-4d5a-940a-6d1a2ab7f923",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Q\n",
      "1.0\n",
      "1.0\n"
     ]
    }
   ],
   "source": [
    "#最小值索引标签\n",
    "min_id = df['Python'].idxmin()\n",
    "print(min_id)\n",
    "print(df['Python'].loc[min_id])\n",
    "\n",
    "print(df['Python'].min())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a3d46ee-78f3-4c2b-b37a-09e07ef7a7fe",
   "metadata": {},
   "source": [
    "### 更多统计标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "702c9173-9d61-40aa-9dee-4859c80d50a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>87</td>\n",
       "      <td>30.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>54</td>\n",
       "      <td>18.0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>32</td>\n",
       "      <td>23.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>58</td>\n",
       "      <td>35.0</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>83</td>\n",
       "      <td>NaN</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>73</td>\n",
       "      <td>84.0</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>75</td>\n",
       "      <td>28.0</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>11</td>\n",
       "      <td>83.0</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>66</td>\n",
       "      <td>77.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>71</td>\n",
       "      <td>65.0</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>68</td>\n",
       "      <td>50.0</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>54</td>\n",
       "      <td>26.0</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>24</td>\n",
       "      <td>57.0</td>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>34</td>\n",
       "      <td>82.0</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>76</td>\n",
       "      <td>61.0</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>9</td>\n",
       "      <td>72.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>90</td>\n",
       "      <td>83.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>51</td>\n",
       "      <td>56.0</td>\n",
       "      <td>73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>78</td>\n",
       "      <td>78.0</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A       3   7.0       25\n",
       "B      87  30.0       24\n",
       "C      54  18.0       17\n",
       "D      32  23.0       11\n",
       "E      58  35.0       84\n",
       "F      83   NaN       41\n",
       "G      73  84.0       38\n",
       "H      75  28.0       60\n",
       "I      11  83.0       50\n",
       "J      66  77.0       87\n",
       "K      71  65.0       42\n",
       "L      68  50.0       20\n",
       "M      54  26.0       54\n",
       "N      24  57.0       69\n",
       "O      34  82.0       34\n",
       "P      76  61.0       39\n",
       "Q       9  72.0       25\n",
       "R      90  83.0        4\n",
       "S      51  56.0       73\n",
       "T      78  78.0       44"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "bdcf86af-ffd9-4298-b8fd-5e1fd7384394",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python\n",
       "54    2\n",
       "3     1\n",
       "71    1\n",
       "51    1\n",
       "90    1\n",
       "9     1\n",
       "76    1\n",
       "34    1\n",
       "24    1\n",
       "68    1\n",
       "66    1\n",
       "87    1\n",
       "11    1\n",
       "75    1\n",
       "73    1\n",
       "83    1\n",
       "58    1\n",
       "32    1\n",
       "78    1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#统计元素出现次数\n",
    "df['Python'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "43504d77-0075-4395-b535-817682838746",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3, 87, 54, 32, 58, 83, 73, 75, 11, 66, 71, 68, 24, 34, 76,  9, 90,\n",
       "       51, 78])"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#元素去重\n",
    "df['Python'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "4dc8494e-1dd6-498b-9e39-abde50588a8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>37.0</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>144</td>\n",
       "      <td>55.0</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>176</td>\n",
       "      <td>78.0</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>234</td>\n",
       "      <td>113.0</td>\n",
       "      <td>161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>317</td>\n",
       "      <td>NaN</td>\n",
       "      <td>202</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>390</td>\n",
       "      <td>197.0</td>\n",
       "      <td>240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>465</td>\n",
       "      <td>225.0</td>\n",
       "      <td>300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>476</td>\n",
       "      <td>308.0</td>\n",
       "      <td>350</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>542</td>\n",
       "      <td>385.0</td>\n",
       "      <td>437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>613</td>\n",
       "      <td>450.0</td>\n",
       "      <td>479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>681</td>\n",
       "      <td>500.0</td>\n",
       "      <td>499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>735</td>\n",
       "      <td>526.0</td>\n",
       "      <td>553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>759</td>\n",
       "      <td>583.0</td>\n",
       "      <td>622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>793</td>\n",
       "      <td>665.0</td>\n",
       "      <td>656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>869</td>\n",
       "      <td>726.0</td>\n",
       "      <td>695</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>878</td>\n",
       "      <td>798.0</td>\n",
       "      <td>720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>968</td>\n",
       "      <td>881.0</td>\n",
       "      <td>724</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>1019</td>\n",
       "      <td>937.0</td>\n",
       "      <td>797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>1097</td>\n",
       "      <td>1015.0</td>\n",
       "      <td>841</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python    Math  English\n",
       "A       3     7.0       25\n",
       "B      90    37.0       49\n",
       "C     144    55.0       66\n",
       "D     176    78.0       77\n",
       "E     234   113.0      161\n",
       "F     317     NaN      202\n",
       "G     390   197.0      240\n",
       "H     465   225.0      300\n",
       "I     476   308.0      350\n",
       "J     542   385.0      437\n",
       "K     613   450.0      479\n",
       "L     681   500.0      499\n",
       "M     735   526.0      553\n",
       "N     759   583.0      622\n",
       "O     793   665.0      656\n",
       "P     869   726.0      695\n",
       "Q     878   798.0      720\n",
       "R     968   881.0      724\n",
       "S    1019   937.0      797\n",
       "T    1097  1015.0      841"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累加\n",
    "df.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "3d058a27-a833-44ee-bb77-fe4c78606f68",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>7.000000e+00</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>261</td>\n",
       "      <td>2.100000e+02</td>\n",
       "      <td>600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>14094</td>\n",
       "      <td>3.780000e+03</td>\n",
       "      <td>10200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>451008</td>\n",
       "      <td>8.694000e+04</td>\n",
       "      <td>112200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>26158464</td>\n",
       "      <td>3.042900e+06</td>\n",
       "      <td>9424800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>2171152512</td>\n",
       "      <td>NaN</td>\n",
       "      <td>386416800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>158494133376</td>\n",
       "      <td>2.556036e+08</td>\n",
       "      <td>14683838400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>11887060003200</td>\n",
       "      <td>7.156901e+09</td>\n",
       "      <td>881030304000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>130757660035200</td>\n",
       "      <td>5.940228e+11</td>\n",
       "      <td>44051515200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>8630005562323200</td>\n",
       "      <td>4.573975e+13</td>\n",
       "      <td>3832481822400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>612730394924947200</td>\n",
       "      <td>2.973084e+15</td>\n",
       "      <td>160964236540800000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>4772178707477306368</td>\n",
       "      <td>1.486542e+17</td>\n",
       "      <td>3219284730816000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>-556766828159178752</td>\n",
       "      <td>3.865009e+18</td>\n",
       "      <td>7820678800678035456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>5084340197889261568</td>\n",
       "      <td>2.203055e+20</td>\n",
       "      <td>4671259109207449600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>6846870064848928768</td>\n",
       "      <td>1.806505e+22</td>\n",
       "      <td>-7197886950332678144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>3853290864651141120</td>\n",
       "      <td>1.101968e+24</td>\n",
       "      <td>-4016429957331173376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>-2213870365558833152</td>\n",
       "      <td>7.934171e+25</td>\n",
       "      <td>-8177028564731576320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>3665851910510084096</td>\n",
       "      <td>6.585362e+27</td>\n",
       "      <td>4185373888492797952</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2491006698918772736</td>\n",
       "      <td>3.687803e+29</td>\n",
       "      <td>-8062355393088126976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>-8615662295140794368</td>\n",
       "      <td>2.876486e+31</td>\n",
       "      <td>-4255499895396106240</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Python          Math              English\n",
       "A                    3  7.000000e+00                   25\n",
       "B                  261  2.100000e+02                  600\n",
       "C                14094  3.780000e+03                10200\n",
       "D               451008  8.694000e+04               112200\n",
       "E             26158464  3.042900e+06              9424800\n",
       "F           2171152512           NaN            386416800\n",
       "G         158494133376  2.556036e+08          14683838400\n",
       "H       11887060003200  7.156901e+09         881030304000\n",
       "I      130757660035200  5.940228e+11       44051515200000\n",
       "J     8630005562323200  4.573975e+13     3832481822400000\n",
       "K   612730394924947200  2.973084e+15   160964236540800000\n",
       "L  4772178707477306368  1.486542e+17  3219284730816000000\n",
       "M  -556766828159178752  3.865009e+18  7820678800678035456\n",
       "N  5084340197889261568  2.203055e+20  4671259109207449600\n",
       "O  6846870064848928768  1.806505e+22 -7197886950332678144\n",
       "P  3853290864651141120  1.101968e+24 -4016429957331173376\n",
       "Q -2213870365558833152  7.934171e+25 -8177028564731576320\n",
       "R  3665851910510084096  6.585362e+27  4185373888492797952\n",
       "S  2491006698918772736  3.687803e+29 -8062355393088126976\n",
       "T -8615662295140794368  2.876486e+31 -4255499895396106240"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累乘\n",
    "df.cumprod()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "bf7a932c-75f4-4b82-befe-dc7244e341c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     27.131793\n",
       "Math       25.658691\n",
       "English    23.531558\n",
       "dtype: float64"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#标准差\n",
    "df.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "e378020f-64a5-4353-a1b8-136dba825d8d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     736.134211\n",
       "Math       658.368421\n",
       "English    553.734211\n",
       "dtype: float64"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#方差\n",
    "df.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "538e5f08-61ce-4e92-b34c-dc09be743ebe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A       3   7.0       25\n",
       "B       3   7.0       24\n",
       "C       3   7.0       17\n",
       "D       3   7.0       11\n",
       "E       3   7.0       11\n",
       "F       3   NaN       11\n",
       "G       3   7.0       11\n",
       "H       3   7.0       11\n",
       "I       3   7.0       11\n",
       "J       3   7.0       11\n",
       "K       3   7.0       11\n",
       "L       3   7.0       11\n",
       "M       3   7.0       11\n",
       "N       3   7.0       11\n",
       "O       3   7.0       11\n",
       "P       3   7.0       11\n",
       "Q       3   7.0       11\n",
       "R       3   7.0        4\n",
       "S       3   7.0        4\n",
       "T       3   7.0        4"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累计最小值\n",
    "df.cummin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "e719ecb9-bebf-4b11-86b9-4aa481f2d267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>3</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>87</td>\n",
       "      <td>30.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>87</td>\n",
       "      <td>30.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>87</td>\n",
       "      <td>30.0</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>87</td>\n",
       "      <td>35.0</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>87</td>\n",
       "      <td>NaN</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>87</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>90</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>90</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>90</td>\n",
       "      <td>84.0</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A       3   7.0       25\n",
       "B      87  30.0       25\n",
       "C      87  30.0       25\n",
       "D      87  30.0       25\n",
       "E      87  35.0       84\n",
       "F      87   NaN       84\n",
       "G      87  84.0       84\n",
       "H      87  84.0       84\n",
       "I      87  84.0       84\n",
       "J      87  84.0       87\n",
       "K      87  84.0       87\n",
       "L      87  84.0       87\n",
       "M      87  84.0       87\n",
       "N      87  84.0       87\n",
       "O      87  84.0       87\n",
       "P      87  84.0       87\n",
       "Q      87  84.0       87\n",
       "R      90  84.0       87\n",
       "S      90  84.0       87\n",
       "T      90  84.0       87"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#累计最大值\n",
    "df.cummax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "de401fc8-5c61-4587-9a21-eb7979733e65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>84.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-33.0</td>\n",
       "      <td>-12.0</td>\n",
       "      <td>-7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-22.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>-6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>26.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>73.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>25.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-43.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>-10.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2.0</td>\n",
       "      <td>-56.0</td>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>-64.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>-10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>55.0</td>\n",
       "      <td>-6.0</td>\n",
       "      <td>37.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>5.0</td>\n",
       "      <td>-12.0</td>\n",
       "      <td>-45.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>-3.0</td>\n",
       "      <td>-15.0</td>\n",
       "      <td>-22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>-14.0</td>\n",
       "      <td>-24.0</td>\n",
       "      <td>34.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>-30.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>10.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>-35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>42.0</td>\n",
       "      <td>-21.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>-67.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>-14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>81.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>-21.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>-39.0</td>\n",
       "      <td>-27.0</td>\n",
       "      <td>69.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>27.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>-29.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "A     NaN   NaN      NaN\n",
       "B    84.0  23.0     -1.0\n",
       "C   -33.0 -12.0     -7.0\n",
       "D   -22.0   5.0     -6.0\n",
       "E    26.0  12.0     73.0\n",
       "F    25.0   NaN    -43.0\n",
       "G   -10.0   NaN     -3.0\n",
       "H     2.0 -56.0     22.0\n",
       "I   -64.0  55.0    -10.0\n",
       "J    55.0  -6.0     37.0\n",
       "K     5.0 -12.0    -45.0\n",
       "L    -3.0 -15.0    -22.0\n",
       "M   -14.0 -24.0     34.0\n",
       "N   -30.0  31.0     15.0\n",
       "O    10.0  25.0    -35.0\n",
       "P    42.0 -21.0      5.0\n",
       "Q   -67.0  11.0    -14.0\n",
       "R    81.0  11.0    -21.0\n",
       "S   -39.0 -27.0     69.0\n",
       "T    27.0  22.0    -29.0"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算差分\n",
    "df.diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "6e016f54-941a-4a9d-b598-091f7d56886c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>28.000000</td>\n",
       "      <td>3.285714</td>\n",
       "      <td>-0.040000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.379310</td>\n",
       "      <td>-0.400000</td>\n",
       "      <td>-0.291667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-0.407407</td>\n",
       "      <td>0.277778</td>\n",
       "      <td>-0.352941</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0.812500</td>\n",
       "      <td>0.521739</td>\n",
       "      <td>6.636364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0.431034</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.511905</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>-0.120482</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.073171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>0.027397</td>\n",
       "      <td>-0.666667</td>\n",
       "      <td>0.578947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>-0.853333</td>\n",
       "      <td>1.964286</td>\n",
       "      <td>-0.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>-0.072289</td>\n",
       "      <td>0.740000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>0.075758</td>\n",
       "      <td>-0.155844</td>\n",
       "      <td>-0.517241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>-0.042254</td>\n",
       "      <td>-0.230769</td>\n",
       "      <td>-0.523810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>-0.205882</td>\n",
       "      <td>-0.480000</td>\n",
       "      <td>1.700000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>N</th>\n",
       "      <td>-0.555556</td>\n",
       "      <td>1.192308</td>\n",
       "      <td>0.277778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.438596</td>\n",
       "      <td>-0.507246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>1.235294</td>\n",
       "      <td>-0.256098</td>\n",
       "      <td>0.147059</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>-0.881579</td>\n",
       "      <td>0.180328</td>\n",
       "      <td>-0.358974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>9.000000</td>\n",
       "      <td>0.152778</td>\n",
       "      <td>-0.840000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>-0.433333</td>\n",
       "      <td>-0.325301</td>\n",
       "      <td>17.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>0.529412</td>\n",
       "      <td>0.392857</td>\n",
       "      <td>-0.397260</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Python      Math    English\n",
       "A        NaN       NaN        NaN\n",
       "B  28.000000  3.285714  -0.040000\n",
       "C  -0.379310 -0.400000  -0.291667\n",
       "D  -0.407407  0.277778  -0.352941\n",
       "E   0.812500  0.521739   6.636364\n",
       "F   0.431034       NaN  -0.511905\n",
       "G  -0.120482       NaN  -0.073171\n",
       "H   0.027397 -0.666667   0.578947\n",
       "I  -0.853333  1.964286  -0.166667\n",
       "J   5.000000 -0.072289   0.740000\n",
       "K   0.075758 -0.155844  -0.517241\n",
       "L  -0.042254 -0.230769  -0.523810\n",
       "M  -0.205882 -0.480000   1.700000\n",
       "N  -0.555556  1.192308   0.277778\n",
       "O   0.416667  0.438596  -0.507246\n",
       "P   1.235294 -0.256098   0.147059\n",
       "Q  -0.881579  0.180328  -0.358974\n",
       "R   9.000000  0.152778  -0.840000\n",
       "S  -0.433333 -0.325301  17.250000\n",
       "T   0.529412  0.392857  -0.397260"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算百分比变化\n",
    "df.pct_change(fill_method=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78ccd793-4ae9-4f51-b618-a41ab0337e56",
   "metadata": {},
   "source": [
    "### 高级统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "0c6a6b3b-2fc7-4a5c-8e07-c914965c483d",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 100, size=(20,3)),\n",
    "                  index=list('ABCDEFGHIJKLMNOPQRST'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "\n",
    "def convert(x):\n",
    "    return np.NaN if x > 90 else x\n",
    "    \n",
    "df['Python'] = df['Python'].map(convert)\n",
    "df['Math'] = df['Math'].map(convert)\n",
    "df['English'] = df['English'].map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "id": "c755e1ad-6158-4d2e-abfe-58dd5390782c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>497.450000</td>\n",
       "      <td>141.492424</td>\n",
       "      <td>126.972527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>141.492424</td>\n",
       "      <td>706.866667</td>\n",
       "      <td>-132.824176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>126.972527</td>\n",
       "      <td>-132.824176</td>\n",
       "      <td>646.147059</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Python        Math     English\n",
       "Python   497.450000  141.492424  126.972527\n",
       "Math     141.492424  706.866667 -132.824176\n",
       "English  126.972527 -132.824176  646.147059"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#协方差\n",
    "df.cov()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "e9c6dc68-a003-4a9e-a67e-38723ff9260c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "126.97252747252746"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#两列的协方差\n",
    "df['Python'].cov(df['English'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "3ff6b73e-a660-4025-8824-90ba26d8922c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.244591</td>\n",
       "      <td>0.208850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>0.244591</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.194606</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>English</th>\n",
       "      <td>0.208850</td>\n",
       "      <td>-0.194606</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python      Math   English\n",
       "Python   1.000000  0.244591  0.208850\n",
       "Math     0.244591  1.000000 -0.194606\n",
       "English  0.208850 -0.194606  1.000000"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#相关性系数\n",
    "df.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "c08cc74b-8fdf-4be3-98df-40fc68beca94",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     0.208850\n",
       "Math      -0.194606\n",
       "English    1.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#单一属性相关性系数\n",
    "df.corrwith(df['English'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b0a67e3-2f91-471b-ab49-a7152295f0e6",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "04470d5a-6d64-4c00-85ab-b97895002fca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>3</td>\n",
       "      <td>29</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>5</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>21</td>\n",
       "      <td>20</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "q       3    29       10\n",
       "w      10    13       24\n",
       "e      25     5       21\n",
       "r       1    27       14\n",
       "t      21    20        6"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randint(0, 30, size=(30, 3)),\n",
    "                  index=list('qwertyuioijhgfcasdcvbnerfghjcf'),\n",
    "                  columns=['Python', 'Math', 'English'])\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "0e40f6d3-ab6c-436f-8085-83cd9f90ee0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>23</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>17</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>8</td>\n",
       "      <td>25</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "a       1     1       24\n",
       "b      23     6       22\n",
       "c      14    15       24\n",
       "c      17    22       12\n",
       "c       8    25       10"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>English</th>\n",
       "      <th>Math</th>\n",
       "      <th>Python</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>10</td>\n",
       "      <td>29</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>24</td>\n",
       "      <td>13</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>21</td>\n",
       "      <td>5</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>14</td>\n",
       "      <td>27</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>6</td>\n",
       "      <td>20</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   English  Math  Python\n",
       "q       10    29       3\n",
       "w       24    13      10\n",
       "e       21     5      25\n",
       "r       14    27       1\n",
       "t        6    20      21"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据索引名排序\n",
    "#1.根据索引排序，默认按照 行索引标签 排序\n",
    "d1 = df.sort_index(axis=0, ascending=True).head()\n",
    "display(d1)\n",
    "#2.按照 列索引标签 排序各列\n",
    "d2 = df.sort_index(axis=1, ascending=True).head()\n",
    "display(d2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "1a0ccd23-79d2-4b80-9bfd-f29159527622",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>3</td>\n",
       "      <td>29</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>o</th>\n",
       "      <td>7</td>\n",
       "      <td>24</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>8</td>\n",
       "      <td>25</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>14</td>\n",
       "      <td>16</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>v</th>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>17</td>\n",
       "      <td>10</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>y</th>\n",
       "      <td>17</td>\n",
       "      <td>27</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>17</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n</th>\n",
       "      <td>18</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>18</td>\n",
       "      <td>20</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>21</td>\n",
       "      <td>20</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>21</td>\n",
       "      <td>20</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>s</th>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>23</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>5</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>25</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>26</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>26</td>\n",
       "      <td>21</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>u</th>\n",
       "      <td>29</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "e       0    12       16\n",
       "h       0    14       17\n",
       "f       1     9        3\n",
       "a       1     1       24\n",
       "r       1    27       14\n",
       "q       3    29       10\n",
       "f       5    11       23\n",
       "o       7    24       12\n",
       "j       8     7        0\n",
       "c       8    25       10\n",
       "r      10     2       20\n",
       "w      10    13       24\n",
       "c      14    15       24\n",
       "g      14    16       19\n",
       "v      16     0        2\n",
       "i      17    10       20\n",
       "y      17    27        7\n",
       "c      17    22       12\n",
       "n      18    13       12\n",
       "d      18    20       12\n",
       "f      20     7        8\n",
       "t      21    20        6\n",
       "j      21    20       20\n",
       "s      21    11       15\n",
       "b      23     6       22\n",
       "e      25     5       21\n",
       "g      25    13        8\n",
       "i      26     2        3\n",
       "h      26    21        8\n",
       "u      29    24        4"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>English</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>3</td>\n",
       "      <td>29</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>o</th>\n",
       "      <td>7</td>\n",
       "      <td>24</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>8</td>\n",
       "      <td>25</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>w</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>14</td>\n",
       "      <td>16</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>v</th>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>17</td>\n",
       "      <td>10</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>17</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>y</th>\n",
       "      <td>17</td>\n",
       "      <td>27</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n</th>\n",
       "      <td>18</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>18</td>\n",
       "      <td>20</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>s</th>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <td>21</td>\n",
       "      <td>20</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>21</td>\n",
       "      <td>20</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>23</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>25</td>\n",
       "      <td>5</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>25</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>26</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>26</td>\n",
       "      <td>21</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>u</th>\n",
       "      <td>29</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  English\n",
       "e       0    12       16\n",
       "h       0    14       17\n",
       "a       1     1       24\n",
       "f       1     9        3\n",
       "r       1    27       14\n",
       "q       3    29       10\n",
       "f       5    11       23\n",
       "o       7    24       12\n",
       "j       8     7        0\n",
       "c       8    25       10\n",
       "r      10     2       20\n",
       "w      10    13       24\n",
       "c      14    15       24\n",
       "g      14    16       19\n",
       "v      16     0        2\n",
       "i      17    10       20\n",
       "c      17    22       12\n",
       "y      17    27        7\n",
       "n      18    13       12\n",
       "d      18    20       12\n",
       "f      20     7        8\n",
       "s      21    11       15\n",
       "t      21    20        6\n",
       "j      21    20       20\n",
       "b      23     6       22\n",
       "e      25     5       21\n",
       "g      25    13        8\n",
       "i      26     2        3\n",
       "h      26    21        8\n",
       "u      29    24        4"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#根据属性值排序\n",
    "#1.根据某一列排序\n",
    "d1 = df.sort_values(by = 'Python')\n",
    "display(d1)\n",
    "#2.根据多列排序\n",
    "d2 = df.sort_values(by = ['Python', 'Math'])\n",
    "display(d2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a40d1ce-01ae-4781-b754-305f8f894b61",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 分箱操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "id": "89520168-d3f0-45b8-9db3-7650696ee980",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>55</td>\n",
       "      <td>37</td>\n",
       "      <td>125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>24</td>\n",
       "      <td>52</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>46</td>\n",
       "      <td>11</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>74</td>\n",
       "      <td>77</td>\n",
       "      <td>107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>71</td>\n",
       "      <td>106</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>150</td>\n",
       "      <td>130</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>40</td>\n",
       "      <td>129</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>113</td>\n",
       "      <td>46</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>39</td>\n",
       "      <td>122</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>105</td>\n",
       "      <td>38</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Tensorflow  Keras\n",
       "0       55          37    125\n",
       "1       24          52     11\n",
       "2       46          11    105\n",
       "3       74          77    107\n",
       "4       71         106      6\n",
       "..     ...         ...    ...\n",
       "95     150         130     16\n",
       "96      40         129    105\n",
       "97     113          46      8\n",
       "98      39         122    150\n",
       "99     105          38    108\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data = np.random.randint(0,151,size = (100,3)),\n",
    "                  columns=['Python','Tensorflow','Keras'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "id": "0dd51542-1bfa-43cb-9f27-771afbe12aeb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      (50.0, 100.0]\n",
       "1      (-0.15, 50.0]\n",
       "2      (-0.15, 50.0]\n",
       "3      (50.0, 100.0]\n",
       "4      (50.0, 100.0]\n",
       "           ...      \n",
       "95    (100.0, 150.0]\n",
       "96     (-0.15, 50.0]\n",
       "97    (100.0, 150.0]\n",
       "98     (-0.15, 50.0]\n",
       "99    (100.0, 150.0]\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (3, interval[float64, right]): [(-0.15, 50.0] < (50.0, 100.0] < (100.0, 150.0]]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Python\n",
       "(50.0, 100.0]     40\n",
       "(100.0, 150.0]    32\n",
       "(-0.15, 50.0]     28\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1、等宽分箱\n",
    "t = pd.cut(df.Python, bins = 3) # 分为三段，每段长度约为 50\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "id": "dda63f18-fd87-497b-aa70-d23a003b69fc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      优秀\n",
       "1     不及格\n",
       "2      良好\n",
       "3      良好\n",
       "4     不及格\n",
       "     ... \n",
       "95    不及格\n",
       "96     良好\n",
       "97    不及格\n",
       "98    NaN\n",
       "99     良好\n",
       "Name: Keras, Length: 100, dtype: category\n",
       "Categories (4, object): ['不及格' < '中等' < '良好' < '优秀']"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Keras\n",
       "不及格    41\n",
       "中等     21\n",
       "良好     20\n",
       "优秀     17\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定宽度分箱\n",
    "t = pd.cut(df.Keras,#分箱数据\n",
    "       bins = [0,60,90,120,150],#分箱断点\n",
    "       right = False,# includes the rightmost edge or not\n",
    "       labels=['不及格','中等','良好','优秀'])# 分箱后分类\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "e1347bd1-4fcc-45d5-9530-d6c908f87a4b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     中\n",
       "1     差\n",
       "2     差\n",
       "3     中\n",
       "4     中\n",
       "     ..\n",
       "95    优\n",
       "96    差\n",
       "97    优\n",
       "98    差\n",
       "99    良\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (4, object): ['差' < '中' < '良' < '优']"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Python\n",
       "良    26\n",
       "差    25\n",
       "中    25\n",
       "优    24\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 2、等频分箱\n",
    "t = pd.qcut(df.Python,\n",
    "        q = 4,# 4等分\n",
    "        labels=['差','中','良','优']) # 分箱后分类\n",
    "display(t)\n",
    "print('-------')\n",
    "t.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25591d50-ee49-4a40-9faa-6afc7c7ebe0a",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 分组聚合"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cc8e3fd-3ca0-4f1d-b04b-8505252a497f",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### 分组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "id": "e11bd259-4cca-4f9e-93ad-0cbd6c0a8411",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>148</td>\n",
       "      <td>45</td>\n",
       "      <td>69</td>\n",
       "      <td>117</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>8</td>\n",
       "      <td>35</td>\n",
       "      <td>99</td>\n",
       "      <td>35</td>\n",
       "      <td>99</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>138</td>\n",
       "      <td>123</td>\n",
       "      <td>149</td>\n",
       "      <td>150</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>famale</td>\n",
       "      <td>7</td>\n",
       "      <td>42</td>\n",
       "      <td>77</td>\n",
       "      <td>84</td>\n",
       "      <td>69</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>famale</td>\n",
       "      <td>8</td>\n",
       "      <td>19</td>\n",
       "      <td>27</td>\n",
       "      <td>141</td>\n",
       "      <td>141</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      5     148     45          69   117  112\n",
       "1  famale      8      35     99          35    99   43\n",
       "2  famale      2     138    123         149   150   31\n",
       "3  famale      7      42     77          84    69    8\n",
       "4  famale      8      19     27         141   141  110"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "id": "440b7841-4172-44a9-9a43-c5b6823e402b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "famale\n",
      "     Python  Java\n",
      "0       148   117\n",
      "1        35    99\n",
      "2       138   150\n",
      "3        42    69\n",
      "4        19   141\n",
      "..      ...   ...\n",
      "287       1    27\n",
      "289      57   107\n",
      "292     137     5\n",
      "298      18   117\n",
      "299      33    42\n",
      "\n",
      "[155 rows x 2 columns]\n",
      "---\n",
      "male\n",
      "     Python  Java\n",
      "5       123     9\n",
      "7       103    43\n",
      "9       141     1\n",
      "10       11   113\n",
      "12       21   130\n",
      "..      ...   ...\n",
      "293      71    85\n",
      "294      30    50\n",
      "295      88    26\n",
      "296      37    56\n",
      "297     125    46\n",
      "\n",
      "[145 rows x 2 columns]\n",
      "---\n"
     ]
    }
   ],
   "source": [
    "# 1.先分组、再选择列\n",
    "g = df.groupby(by = 'sex')[['Python', 'Java']]\n",
    "\n",
    "def printg(g):\n",
    "    i = 0\n",
    "    for name,data in g:\n",
    "        if i > 2:\n",
    "            print('数据太多...省略一万字...')\n",
    "            return\n",
    "        print(name)\n",
    "        print(data)\n",
    "        print('---')\n",
    "        i += 1\n",
    "\n",
    "printg(g)\n",
    "\n",
    "#多分组：对多个列进行分组\n",
    "#g = df.groupby(by = ['class', 'sex'])[['Python']]\n",
    "#printg(g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "id": "481a16c9-f447-4682-9ea4-3fdf0a7f17ca",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "5      123\n",
      "7      103\n",
      "45      48\n",
      "48     105\n",
      "54       2\n",
      "58     137\n",
      "70      43\n",
      "71      29\n",
      "86      94\n",
      "87      79\n",
      "93      30\n",
      "104     73\n",
      "107     64\n",
      "114     26\n",
      "117     99\n",
      "138     63\n",
      "143    100\n",
      "152      8\n",
      "153    142\n",
      "172    125\n",
      "175     40\n",
      "178     38\n",
      "183     48\n",
      "196     80\n",
      "208      2\n",
      "223     83\n",
      "231     64\n",
      "239     99\n",
      "240     74\n",
      "242     49\n",
      "244    131\n",
      "245    108\n",
      "251    105\n",
      "253    149\n",
      "271    124\n",
      "275    149\n",
      "288     51\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "2\n",
      "2      138\n",
      "8       60\n",
      "10      11\n",
      "13      78\n",
      "21      59\n",
      "31      99\n",
      "51      81\n",
      "77      86\n",
      "101     25\n",
      "110     52\n",
      "112    106\n",
      "116     76\n",
      "122    142\n",
      "126     90\n",
      "128     64\n",
      "134    108\n",
      "140     31\n",
      "156     14\n",
      "157     44\n",
      "164    130\n",
      "179    111\n",
      "180     77\n",
      "185    139\n",
      "186    115\n",
      "211    120\n",
      "219    107\n",
      "224      7\n",
      "225    138\n",
      "227     26\n",
      "234     76\n",
      "235    145\n",
      "247    114\n",
      "248    100\n",
      "262     64\n",
      "273     38\n",
      "278     52\n",
      "289     57\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "3\n",
      "9      141\n",
      "20     138\n",
      "26     148\n",
      "32      17\n",
      "39      74\n",
      "42      38\n",
      "43      13\n",
      "72      52\n",
      "76      20\n",
      "78     145\n",
      "95      84\n",
      "106     88\n",
      "139     10\n",
      "154     64\n",
      "155    123\n",
      "160    146\n",
      "163    110\n",
      "182    127\n",
      "184     10\n",
      "194     14\n",
      "195    139\n",
      "287      1\n",
      "297    125\n",
      "299     33\n",
      "Name: Python, dtype: int64\n",
      "---\n",
      "数据太多...省略一万字...\n"
     ]
    }
   ],
   "source": [
    "# 2、对一列值进行分组\n",
    "g = df['Python'].groupby(df['class'])\n",
    "printg(g)\n",
    "#等价写法？\n",
    "# printg(df.groupby(by = 'class')[['Python']])\n",
    "\n",
    "#多分组\n",
    "# printg(df['Keras'].groupby([df['class'], df['sex']]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "id": "acdc07d7-7bcc-400f-bdee-d68c28fe28f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int64\n",
      "     class  Python  Keras  Tensorflow  Java  C++\n",
      "0        5     148     45          69   117  112\n",
      "1        8      35     99          35    99   43\n",
      "2        2     138    123         149   150   31\n",
      "3        7      42     77          84    69    8\n",
      "4        8      19     27         141   141  110\n",
      "..     ...     ...    ...         ...   ...  ...\n",
      "295      5      88    139          63    26   98\n",
      "296      8      37     83          66    56   58\n",
      "297      3     125    144          16    46   40\n",
      "298      5      18    148         140   117  139\n",
      "299      3      33     60          30    42  122\n",
      "\n",
      "[300 rows x 6 columns]\n",
      "---\n",
      "object\n",
      "        sex\n",
      "0    famale\n",
      "1    famale\n",
      "2    famale\n",
      "3    famale\n",
      "4    famale\n",
      "..      ...\n",
      "295    male\n",
      "296    male\n",
      "297    male\n",
      "298  famale\n",
      "299  famale\n",
      "\n",
      "[300 rows x 1 columns]\n",
      "---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_4214/58823927.py:2: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n",
      "  printg(df.groupby(df.dtypes, axis=1))\n"
     ]
    }
   ],
   "source": [
    "# 3、按数据类型分组\n",
    "printg(df.groupby(df.dtypes, axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "ac0df875-fa21-4d0c-a831-01c74edddf9f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IT\n",
      "     Keras  Tensorflow  Java  C++\n",
      "0       45          69   117  112\n",
      "1       99          35    99   43\n",
      "2      123         149   150   31\n",
      "3       77          84    69    8\n",
      "4       27         141   141  110\n",
      "..     ...         ...   ...  ...\n",
      "295    139          63    26   98\n",
      "296     83          66    56   58\n",
      "297    144          16    46   40\n",
      "298    148         140   117  139\n",
      "299     60          30    42  122\n",
      "\n",
      "[300 rows x 4 columns]\n",
      "---\n",
      "category\n",
      "        sex  class\n",
      "0    famale      5\n",
      "1    famale      8\n",
      "2    famale      2\n",
      "3    famale      7\n",
      "4    famale      8\n",
      "..      ...    ...\n",
      "295    male      5\n",
      "296    male      8\n",
      "297    male      3\n",
      "298  famale      5\n",
      "299  famale      3\n",
      "\n",
      "[300 rows x 2 columns]\n",
      "---\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_4214/2953024773.py:11: FutureWarning: DataFrame.groupby with axis=1 is deprecated. Do `frame.T.groupby(...)` without axis instead.\n",
      "  printg(df.groupby(m, axis=1))\n"
     ]
    }
   ],
   "source": [
    "# 4、通过字典进行分组\n",
    "m = {\n",
    "    'sex': 'category',\n",
    "    'class': 'category',\n",
    "    'Pytorch': 'IT',\n",
    "    'Keras': 'IT',\n",
    "    'Tensorflow': 'IT',\n",
    "    'Java': 'IT',\n",
    "    'C++': 'IT'\n",
    "}\n",
    "printg(df.groupby(m, axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "681c5c10-e0fc-44ba-9a35-c71d6d55ea20",
   "metadata": {},
   "source": [
    "### 分组聚合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "id": "8b0ac55b-3cd9-4e11-8730-4745cb331d30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>7</td>\n",
       "      <td>62</td>\n",
       "      <td>126</td>\n",
       "      <td>145</td>\n",
       "      <td>25</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>29</td>\n",
       "      <td>118</td>\n",
       "      <td>69</td>\n",
       "      <td>75</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>88</td>\n",
       "      <td>134</td>\n",
       "      <td>61</td>\n",
       "      <td>72</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>6</td>\n",
       "      <td>32</td>\n",
       "      <td>63</td>\n",
       "      <td>89</td>\n",
       "      <td>53</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>45</td>\n",
       "      <td>44</td>\n",
       "      <td>47</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      7      62    126         145    25   63\n",
       "1  famale      5      29    118          69    75   60\n",
       "2    male      4      88    134          61    72  136\n",
       "3    male      6      32     63          89    53    2\n",
       "4    male      4       9     45          44    47  129"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "id": "680edf88-7bcd-4c89-a327-c0d72c1d7cdd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>famale</th>\n",
       "      <td>4.8</td>\n",
       "      <td>74.4</td>\n",
       "      <td>75.2</td>\n",
       "      <td>79.4</td>\n",
       "      <td>68.3</td>\n",
       "      <td>75.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>4.5</td>\n",
       "      <td>74.5</td>\n",
       "      <td>73.2</td>\n",
       "      <td>72.2</td>\n",
       "      <td>76.9</td>\n",
       "      <td>80.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        class  Python  Keras  Tensorflow  Java   C++\n",
       "sex                                                 \n",
       "famale    4.8    74.4   75.2        79.4  68.3  75.2\n",
       "male      4.5    74.5   73.2        72.2  76.9  80.2"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别分组计算平均值\n",
    "df.groupby(by = 'sex').mean().round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "7f79e0e9-5430-475e-bc7c-69e4d4e6966c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex\n",
       "famale    152\n",
       "male      148\n",
       "dtype: int64"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别分组统计男女生数量\n",
    "df.groupby(by = 'sex').size()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "id": "559afa71-b461-4303-8e1f-932d16d8ce4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex     class\n",
       "famale  1        20\n",
       "        2        14\n",
       "        3        11\n",
       "        4        24\n",
       "        5        16\n",
       "        6        18\n",
       "        7        23\n",
       "        8        26\n",
       "male    1        17\n",
       "        2        21\n",
       "        3        16\n",
       "        4        18\n",
       "        5        16\n",
       "        6        23\n",
       "        7        21\n",
       "        8        16\n",
       "dtype: int64"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按性别和班级分组统计各班男女生数量\n",
    "df.groupby(by = ['sex', 'class']).size()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "id": "7cb89d3f-3f40-499a-82cc-307b425b3352",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"8\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"8\" halign=\"left\">Java</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>famale</th>\n",
       "      <td>90.650000</td>\n",
       "      <td>81.357143</td>\n",
       "      <td>67.272727</td>\n",
       "      <td>58.916667</td>\n",
       "      <td>86.6875</td>\n",
       "      <td>77.777778</td>\n",
       "      <td>80.130435</td>\n",
       "      <td>60.692308</td>\n",
       "      <td>69.450000</td>\n",
       "      <td>54.642857</td>\n",
       "      <td>76.0000</td>\n",
       "      <td>73.333333</td>\n",
       "      <td>75.2500</td>\n",
       "      <td>77.277778</td>\n",
       "      <td>66.956522</td>\n",
       "      <td>57.538462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>77.235294</td>\n",
       "      <td>74.619048</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>86.444444</td>\n",
       "      <td>62.3750</td>\n",
       "      <td>81.652174</td>\n",
       "      <td>74.904762</td>\n",
       "      <td>69.312500</td>\n",
       "      <td>81.588235</td>\n",
       "      <td>81.666667</td>\n",
       "      <td>92.1875</td>\n",
       "      <td>78.833333</td>\n",
       "      <td>69.9375</td>\n",
       "      <td>62.217391</td>\n",
       "      <td>80.476190</td>\n",
       "      <td>71.125000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python                                                       \\\n",
       "class           1          2          3          4        5          6   \n",
       "sex                                                                      \n",
       "famale  90.650000  81.357143  67.272727  58.916667  86.6875  77.777778   \n",
       "male    77.235294  74.619048  64.750000  86.444444  62.3750  81.652174   \n",
       "\n",
       "                                   Java                                 \\\n",
       "class           7          8          1          2        3          4   \n",
       "sex                                                                      \n",
       "famale  80.130435  60.692308  69.450000  54.642857  76.0000  73.333333   \n",
       "male    74.904762  69.312500  81.588235  81.666667  92.1875  78.833333   \n",
       "\n",
       "                                                  \n",
       "class         5          6          7          8  \n",
       "sex                                               \n",
       "famale  75.2500  77.277778  66.956522  57.538462  \n",
       "male    69.9375  62.217391  80.476190  71.125000  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#按性别和班级分组，统计各班男女生的 Python,Java 平均分\n",
    "g = df.groupby(by = ['sex', 'class'])[['Python', 'Java']].mean()\n",
    "\n",
    "#使用之前的知识：多层索引数据重塑\n",
    "g\n",
    "display(g.unstack())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1bd15f1-3f77-48be-bbf3-1f912d18c258",
   "metadata": {},
   "source": [
    "### 分组聚合 apply 和 transform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "afd09be8-8b16-49c7-b400-662ae55d1107",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>3</td>\n",
       "      <td>93</td>\n",
       "      <td>6</td>\n",
       "      <td>54</td>\n",
       "      <td>66</td>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>61</td>\n",
       "      <td>39</td>\n",
       "      <td>121</td>\n",
       "      <td>148</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>71</td>\n",
       "      <td>96</td>\n",
       "      <td>78</td>\n",
       "      <td>54</td>\n",
       "      <td>134</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>86</td>\n",
       "      <td>42</td>\n",
       "      <td>143</td>\n",
       "      <td>102</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>48</td>\n",
       "      <td>67</td>\n",
       "      <td>33</td>\n",
       "      <td>146</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      3      93      6          54    66  132\n",
       "1  famale      5      61     39         121   148   64\n",
       "2    male      4      71     96          78    54  134\n",
       "3    male      7      86     42         143   102   40\n",
       "4  famale      5      48     67          33   146    3"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "c50dcdd8-981c-4bb1-bd60-9b66895d1e89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>96.7</td>\n",
       "      <td>58.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>84.9</td>\n",
       "      <td>67.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>64.8</td>\n",
       "      <td>80.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>74.2</td>\n",
       "      <td>77.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>68.6</td>\n",
       "      <td>86.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>45.2</td>\n",
       "      <td>67.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>74.1</td>\n",
       "      <td>74.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>80.8</td>\n",
       "      <td>57.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>72.6</td>\n",
       "      <td>68.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>82.2</td>\n",
       "      <td>37.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>72.5</td>\n",
       "      <td>64.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>57.2</td>\n",
       "      <td>88.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>75.9</td>\n",
       "      <td>66.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>59.3</td>\n",
       "      <td>80.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>83.9</td>\n",
       "      <td>68.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>83.7</td>\n",
       "      <td>73.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Python  Keras\n",
       "class sex                  \n",
       "1     famale    96.7   58.1\n",
       "      male      84.9   67.3\n",
       "2     famale    64.8   80.5\n",
       "      male      74.2   77.7\n",
       "3     famale    68.6   86.8\n",
       "      male      45.2   67.8\n",
       "4     famale    74.1   74.4\n",
       "      male      80.8   57.0\n",
       "5     famale    72.6   68.9\n",
       "      male      82.2   37.0\n",
       "6     famale    72.5   64.8\n",
       "      male      57.2   88.5\n",
       "7     famale    75.9   66.6\n",
       "      male      59.3   80.9\n",
       "8     famale    83.9   68.0\n",
       "      male      83.7   73.9"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#apply() 返回统计结果\n",
    "df.groupby(by = ['class', 'sex'])[['Python', 'Keras']].apply(np.mean, axis=0).round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "id": "90ead51e-c8b4-42a8-bc71-d95a5948895c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>68.6</td>\n",
       "      <td>86.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>72.6</td>\n",
       "      <td>68.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>80.8</td>\n",
       "      <td>57.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>59.3</td>\n",
       "      <td>80.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>72.6</td>\n",
       "      <td>68.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>96.7</td>\n",
       "      <td>58.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>59.3</td>\n",
       "      <td>80.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>82.2</td>\n",
       "      <td>37.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>72.6</td>\n",
       "      <td>68.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>74.1</td>\n",
       "      <td>74.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>300 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python  Keras\n",
       "0      68.6   86.8\n",
       "1      72.6   68.9\n",
       "2      80.8   57.0\n",
       "3      59.3   80.9\n",
       "4      72.6   68.9\n",
       "..      ...    ...\n",
       "295    96.7   58.1\n",
       "296    59.3   80.9\n",
       "297    82.2   37.0\n",
       "298    72.6   68.9\n",
       "299    74.1   74.4\n",
       "\n",
       "[300 rows x 2 columns]"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#transform() 返回所有结果\n",
    "#问：为何没有体现性别？\n",
    "#答：体现了，比如行索引为 0 的 Python 列的值代表的是它（指行索引为 0 的学生）\n",
    "#   所在班级以及它所属性别的该学科平均值。有点绕，就是需要反推出学生所在的班级和性别\n",
    "df.groupby(by = ['class', 'sex'])[['Python', 'Keras']].transform('mean').round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a55f420d-a77b-445b-9f08-8a6656766376",
   "metadata": {},
   "source": [
    "### 分组聚合 agg\n",
    "\n",
    "可对不同的列执行不同的操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "41139532-29c5-49b6-a727-a50c8740ebbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>91</td>\n",
       "      <td>58</td>\n",
       "      <td>80</td>\n",
       "      <td>69</td>\n",
       "      <td>119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>2</td>\n",
       "      <td>147</td>\n",
       "      <td>131</td>\n",
       "      <td>124</td>\n",
       "      <td>150</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>3</td>\n",
       "      <td>68</td>\n",
       "      <td>35</td>\n",
       "      <td>76</td>\n",
       "      <td>68</td>\n",
       "      <td>46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>famale</td>\n",
       "      <td>7</td>\n",
       "      <td>133</td>\n",
       "      <td>39</td>\n",
       "      <td>47</td>\n",
       "      <td>130</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>male</td>\n",
       "      <td>3</td>\n",
       "      <td>64</td>\n",
       "      <td>31</td>\n",
       "      <td>53</td>\n",
       "      <td>43</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0    male      4      91     58          80    69  119\n",
       "1    male      2     147    131         124   150  102\n",
       "2    male      3      68     35          76    68   46\n",
       "3  famale      7     133     39          47   130  115\n",
       "4    male      3      64     31          53    43   80"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "b4c54d7b-adce-424a-b519-081dd7439c03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>max</th>\n",
       "      <th>min</th>\n",
       "      <th>count</th>\n",
       "      <th>max</th>\n",
       "      <th>min</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>6</td>\n",
       "      <td>18</td>\n",
       "      <td>143</td>\n",
       "      <td>18</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>138</td>\n",
       "      <td>11</td>\n",
       "      <td>18</td>\n",
       "      <td>129</td>\n",
       "      <td>0</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>137</td>\n",
       "      <td>23</td>\n",
       "      <td>17</td>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>142</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>139</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>136</td>\n",
       "      <td>4</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>33</td>\n",
       "      <td>25</td>\n",
       "      <td>149</td>\n",
       "      <td>8</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>110</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>150</td>\n",
       "      <td>3</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>143</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>141</td>\n",
       "      <td>3</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>10</td>\n",
       "      <td>18</td>\n",
       "      <td>127</td>\n",
       "      <td>15</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "      <td>142</td>\n",
       "      <td>3</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>104</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>3</td>\n",
       "      <td>22</td>\n",
       "      <td>126</td>\n",
       "      <td>1</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>6</td>\n",
       "      <td>20</td>\n",
       "      <td>143</td>\n",
       "      <td>4</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>130</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>142</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>5</td>\n",
       "      <td>20</td>\n",
       "      <td>147</td>\n",
       "      <td>0</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>10</td>\n",
       "      <td>25</td>\n",
       "      <td>150</td>\n",
       "      <td>22</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Tensorflow           Keras          \n",
       "                    max min count   max min count\n",
       "class sex                                        \n",
       "1     famale        146   6    18   143  18    18\n",
       "      male          138  11    18   129   0    18\n",
       "2     famale        137  23    17   149   0    17\n",
       "      male          150   0    25   142   2    25\n",
       "3     famale        139  23    16   136   4    16\n",
       "      male          148  33    25   149   8    25\n",
       "4     famale        110   6    13   150   3    13\n",
       "      male          143   4    18   141   3    18\n",
       "5     famale        150  10    18   127  15    18\n",
       "      male          146   0    21   142   3    21\n",
       "6     famale        150   0    12   104  11    12\n",
       "      male          150   3    22   126   1    22\n",
       "7     famale        146   6    20   143   4    20\n",
       "      male          130   8    12   142  11    12\n",
       "8     famale        150   5    20   147   0    20\n",
       "      male          150  10    25   150  22    25"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#分组后调用 agg 对多列同时应用多种统计汇总\n",
    "df.groupby(by = ['class', 'sex'])[['Tensorflow', 'Keras']] \\\n",
    "    .agg(['max', 'min', pd.Series.count])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "157a2ab9-b758-44ba-a722-9169410da682",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Tensorflow</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>计数</th>\n",
       "      <th>中位数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>6</td>\n",
       "      <td>18</td>\n",
       "      <td>72.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>138</td>\n",
       "      <td>11</td>\n",
       "      <td>18</td>\n",
       "      <td>60.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>137</td>\n",
       "      <td>23</td>\n",
       "      <td>17</td>\n",
       "      <td>60.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>92.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>139</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>65.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>148</td>\n",
       "      <td>33</td>\n",
       "      <td>25</td>\n",
       "      <td>75.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>110</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>91.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>143</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>63.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>10</td>\n",
       "      <td>18</td>\n",
       "      <td>75.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "      <td>75.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>3</td>\n",
       "      <td>22</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>6</td>\n",
       "      <td>20</td>\n",
       "      <td>60.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>130</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>77.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>5</td>\n",
       "      <td>20</td>\n",
       "      <td>59.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>10</td>\n",
       "      <td>25</td>\n",
       "      <td>105.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Tensorflow     Keras       \n",
       "                    最大值 最小值    计数    中位数\n",
       "class sex                               \n",
       "1     famale        146   6    18   72.5\n",
       "      male          138  11    18   60.5\n",
       "2     famale        137  23    17   60.0\n",
       "      male          150   0    25   92.0\n",
       "3     famale        139  23    16   65.5\n",
       "      male          148  33    25   75.0\n",
       "4     famale        110   6    13   91.0\n",
       "      male          143   4    18   63.5\n",
       "5     famale        150  10    18   75.0\n",
       "      male          146   0    21   75.0\n",
       "6     famale        150   0    12   58.0\n",
       "      male          150   3    22   84.0\n",
       "7     famale        146   6    20   60.0\n",
       "      male          130   8    12   77.0\n",
       "8     famale        150   5    20   59.0\n",
       "      male          150  10    25  105.0"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#不同列应用不同的统计汇总\n",
    "df.groupby(by = ['class', 'sex'])[['Tensorflow', 'Keras']] \\\n",
    "    .agg({\n",
    "        'Tensorflow': [('最大值', 'max'), ('最小值', 'min')],\n",
    "        'Keras': [('计数', pd.Series.count), ('中位数', 'median')]\n",
    "    })"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5828fc89-8820-4b9d-8205-321101c26198",
   "metadata": {},
   "source": [
    "### 透视表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "id": "9d8ab56b-4a6d-4043-b0b9-90f91621e373",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Keras</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Java</th>\n",
       "      <th>C++</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>famale</td>\n",
       "      <td>3</td>\n",
       "      <td>46</td>\n",
       "      <td>90</td>\n",
       "      <td>123</td>\n",
       "      <td>64</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>famale</td>\n",
       "      <td>5</td>\n",
       "      <td>149</td>\n",
       "      <td>16</td>\n",
       "      <td>10</td>\n",
       "      <td>51</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>5</td>\n",
       "      <td>109</td>\n",
       "      <td>139</td>\n",
       "      <td>13</td>\n",
       "      <td>55</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>67</td>\n",
       "      <td>20</td>\n",
       "      <td>137</td>\n",
       "      <td>26</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>famale</td>\n",
       "      <td>2</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "      <td>57</td>\n",
       "      <td>84</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      sex  class  Python  Keras  Tensorflow  Java  C++\n",
       "0  famale      3      46     90         123    64   42\n",
       "1  famale      5     149     16          10    51    9\n",
       "2    male      5     109    139          13    55   90\n",
       "3  famale      2      67     20         137    26  112\n",
       "4  famale      2     100     10          57    84    2"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    'sex': np.random.randint(0, 2, size=300),#0famale, 1male\n",
    "    'class': np.random.randint(1, 9, size=300),#Class No.1~8\n",
    "    'Python': np.random.randint(0, 151, size=300),\n",
    "    'Keras': np.random.randint(0, 151, size=300),\n",
    "    'Tensorflow': np.random.randint(0, 151, size=300),\n",
    "    'Java': np.random.randint(0, 151, size=300),\n",
    "    'C++': np.random.randint(0, 151, size=300),\n",
    "})\n",
    "df['sex'] = df['sex'].map({0:'famale', 1:'male'})\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "46934122-4f47-4565-a794-18840ded17c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Keras</th>\n",
       "      <th>Python</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Tensorflow</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>平均值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>计数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>class</th>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">1</th>\n",
       "      <th>famale</th>\n",
       "      <td>150</td>\n",
       "      <td>0</td>\n",
       "      <td>145</td>\n",
       "      <td>68.466667</td>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>147</td>\n",
       "      <td>20</td>\n",
       "      <td>136</td>\n",
       "      <td>84.941176</td>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">2</th>\n",
       "      <th>famale</th>\n",
       "      <td>136</td>\n",
       "      <td>1</td>\n",
       "      <td>139</td>\n",
       "      <td>81.600000</td>\n",
       "      <td>4</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>126</td>\n",
       "      <td>3</td>\n",
       "      <td>150</td>\n",
       "      <td>83.272727</td>\n",
       "      <td>15</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">3</th>\n",
       "      <th>famale</th>\n",
       "      <td>138</td>\n",
       "      <td>0</td>\n",
       "      <td>140</td>\n",
       "      <td>66.315789</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>2</td>\n",
       "      <td>120</td>\n",
       "      <td>100.846154</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">4</th>\n",
       "      <th>famale</th>\n",
       "      <td>148</td>\n",
       "      <td>3</td>\n",
       "      <td>148</td>\n",
       "      <td>98.705882</td>\n",
       "      <td>42</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>130</td>\n",
       "      <td>6</td>\n",
       "      <td>138</td>\n",
       "      <td>71.000000</td>\n",
       "      <td>6</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">5</th>\n",
       "      <th>famale</th>\n",
       "      <td>130</td>\n",
       "      <td>2</td>\n",
       "      <td>149</td>\n",
       "      <td>74.363636</td>\n",
       "      <td>5</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>147</td>\n",
       "      <td>15</td>\n",
       "      <td>149</td>\n",
       "      <td>63.117647</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">6</th>\n",
       "      <th>famale</th>\n",
       "      <td>146</td>\n",
       "      <td>28</td>\n",
       "      <td>128</td>\n",
       "      <td>85.000000</td>\n",
       "      <td>2</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>150</td>\n",
       "      <td>9</td>\n",
       "      <td>150</td>\n",
       "      <td>77.684211</td>\n",
       "      <td>3</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">7</th>\n",
       "      <th>famale</th>\n",
       "      <td>149</td>\n",
       "      <td>40</td>\n",
       "      <td>148</td>\n",
       "      <td>65.315789</td>\n",
       "      <td>9</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>144</td>\n",
       "      <td>4</td>\n",
       "      <td>149</td>\n",
       "      <td>70.304348</td>\n",
       "      <td>7</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">8</th>\n",
       "      <th>famale</th>\n",
       "      <td>149</td>\n",
       "      <td>4</td>\n",
       "      <td>142</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>11</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>135</td>\n",
       "      <td>37</td>\n",
       "      <td>141</td>\n",
       "      <td>104.500000</td>\n",
       "      <td>41</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Keras     Python  Tensorflow        \n",
       "               最大值 最小值    最大值         平均值 最小值  计数\n",
       "class sex                                        \n",
       "1     famale   150   0    145   68.466667   0  30\n",
       "      male     147  20    136   84.941176   0  17\n",
       "2     famale   136   1    139   81.600000   4  20\n",
       "      male     126   3    150   83.272727  15  22\n",
       "3     famale   138   0    140   66.315789   0  19\n",
       "      male     150   2    120  100.846154  13  13\n",
       "4     famale   148   3    148   98.705882  42  17\n",
       "      male     130   6    138   71.000000   6  21\n",
       "5     famale   130   2    149   74.363636   5  22\n",
       "      male     147  15    149   63.117647   1  17\n",
       "6     famale   146  28    128   85.000000   2  15\n",
       "      male     150   9    150   77.684211   3  19\n",
       "7     famale   149  40    148   65.315789   9  19\n",
       "      male     144   4    149   70.304348   7  23\n",
       "8     famale   149   4    142   62.125000  11  16\n",
       "      male     135  37    141  104.500000  41  10"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def count(x):\n",
    "    return len(x)\n",
    "\n",
    "df.pivot_table(values=['Python', 'Keras', 'Tensorflow'], #要透视分组的值，就是要查看的列\n",
    "               index=['class', 'sex'], #分组透视指标，就是以 xxx 分组\n",
    "               aggfunc={ #指定列的聚合操作\n",
    "                   'Python': [('最大值', 'max')],\n",
    "                   'Keras': [('最小值', 'min'), ('最大值', 'max')],\n",
    "                   'Tensorflow': [('最小值', 'min'), ('平均值', 'mean'), ('计数', count)],\n",
    "               })"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60e35d46-0bf3-4cd4-a8db-6ffbf9ea574d",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 时间序列\n",
    "\n",
    "（老师没讲）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b0101b1-ab03-4136-9ac6-c0cbbef7d328",
   "metadata": {},
   "source": [
    "### 时间戳操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "ccc76efa-1fce-49c2-b78a-c219b330ab1b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2020-08-24 12:00:00')"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Timestamp('2020-8-24 12')# 时刻数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "b1c9b1ab-69c2-4d03-b3f6-8de53748ec07",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Period('2020-08', 'M')"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Period('2020-8-24', freq = 'M') # 时期数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "abb06044-6a6a-4510-98ba-fb80931bb739",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-31', '2020-09-30', '2020-10-31', '2020-11-30',\n",
       "               '2020-12-31'],\n",
       "              dtype='datetime64[ns]', freq='ME')"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.date_range('2020.08.24', periods=5, freq = 'ME') # 批量时刻数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "6cceb228-17a1-46cd-b840-83f8dc1e129f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PeriodIndex(['2020-08', '2020-09', '2020-10', '2020-11', '2020-12'], dtype='period[M]')"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.period_range('2020.08.24', periods=5, freq='M') # 批量时期数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "f9eac9d2-1a78-48aa-9312-2b3eec7c3b49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2020-08-31', '2020-09-30', '2020-10-31', '2020-11-30',\n",
      "               '2020-12-31'],\n",
      "              dtype='datetime64[ns]', freq='ME')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2020-08-31    4\n",
       "2020-09-30    5\n",
       "2020-10-31    2\n",
       "2020-11-30    0\n",
       "2020-12-31    5\n",
       "Freq: ME, dtype: int64"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('2020.08.24', periods=5, freq = 'ME') # 批量时刻数据\n",
    "print(index)\n",
    "\n",
    "pd.Series(np.random.randint(0, 10, size = 5), index = index) # 时间戳索引Series"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15d9aea2-39fe-4b57-b311-e8e7188babb4",
   "metadata": {},
   "source": [
    "**转换方法**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "2f3e66de-71a0-4ee2-b5de-ea509483e71e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-24', '2020-08-24', '2020-08-24', '2020-08-24'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.to_datetime(['2020.08.24','2020-08-24','24/08/2020','2020/8/24'], format='mixed')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "608d8063-7da8-4a3f-bfb3-9a1bb51726f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 02:37:12'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.to_datetime([1598582232],unit='s')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "4f454439-60d7-4827-ae3e-af83313dba11",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 02:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt = pd.to_datetime([1598582420401],unit = 'ms') # 世界标准时间\n",
    "dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "0d4061fd-e0a3-4423-bbb3-695a42bacec1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-08-28 10:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(hours = 8) # 东八区时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "f6e4ac45-1f09-4904-a90b-4d0d1753d220",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2020-12-06 02:40:20.401000'], dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(days = 100) # 100天后日期"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca48edb7-67c4-4498-8306-0f78683112c1",
   "metadata": {},
   "source": [
    "### 时间戳索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "0486843a-dcc8-47e6-9991-d2b9d338686e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([0, 1, 2, 3, 4, 5, 6, 0, 1, 2,\n",
       "       ...\n",
       "       1, 2, 3, 4, 5, 6, 0, 1, 2, 3],\n",
       "      dtype='int32', length=200)"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range(\"2020-8-24\", periods=200, freq=\"D\")\n",
    "ts = pd.Series(range(len(index)), index=index)\n",
    "\n",
    "# str类型索引\n",
    "ts['2020-08-30'] # 日期访问数据\n",
    "ts['2020-08-24':'2020-09-3'] # 日期切片\n",
    "ts['2020-08'] # 传入年月\n",
    "ts['2020'] # 传入年\n",
    "\n",
    "# 时间戳索引\n",
    "ts[pd.Timestamp('2020-08-30')]\n",
    "ts[pd.Timestamp('2020-08-24'):pd.Timestamp('2020-08-30')] # 切片\n",
    "ts[pd.date_range('2020-08-24',periods=10,freq='D')]\n",
    "\n",
    "# 时间戳索引属性\n",
    "ts.index.year # 获取年\n",
    "ts.index.dayofweek # 获取星期几\n",
    "# ts.index.weekofyear # 一年中第几个星期几"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67681148-6bca-47db-972a-d70d4f43a11e",
   "metadata": {},
   "source": [
    "### 时间序列常用方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "7ae89cb2-b987-4360-8b53-165bfcaeac7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-01-08</th>\n",
       "      <td>21</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-09</th>\n",
       "      <td>22</td>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-10</th>\n",
       "      <td>32</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-11</th>\n",
       "      <td>36</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            price  volume\n",
       "2020-01-08     21     110\n",
       "2020-01-09     22     140\n",
       "2020-01-10     32     150\n",
       "2020-01-11     36      90"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('8/1/2020', periods=365, freq='D')\n",
    "ts = pd.Series(np.random.randint(0, 500, len(index)), index=index)\n",
    "\n",
    "# 1、移动\n",
    "ts.shift(periods = 2) #  数据后移 \n",
    "ts.shift(periods = -2) # 数据前移\n",
    "\n",
    "# 日期移动\n",
    "ts.shift(periods = 2,freq = pd.tseries.offsets.Day()) # 天移动\n",
    "# ts.tshift(periods = 1,freq = pd.tseries.offsets.MonthOffset()) #月移动\n",
    "\n",
    "# 2、频率转换\n",
    "ts.asfreq(pd.tseries.offsets.Week()) # 天变周\n",
    "ts.asfreq(pd.tseries.offsets.MonthEnd()) # 天变月\n",
    "ts.asfreq(pd.tseries.offsets.Hour(),fill_value = 0) #天变小时，又少变多，fill_value为填充值\n",
    "\n",
    "# 3、重采样\n",
    "# resample 表示根据日期维度进行数据聚合，可以按照分钟、小时、工作日、周、月、年等来作为日期维度\n",
    "ts.resample('2W').sum() # 以2周为单位进行汇总\n",
    "ts.resample('3ME').sum().cumsum() # 以季度为单位进行汇总\n",
    "\n",
    "# 4、DataFrame重采样\n",
    "d = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],\n",
    "          'volume': [50, 60, 40, 100, 50, 100, 40, 50],\n",
    "          'week_starting':pd.date_range('24/08/2020',periods=8,freq='W')})\n",
    "df1 = pd.DataFrame(d)\n",
    "df1.resample('ME',on = 'week_starting').apply('sum')\n",
    "df1.resample('ME',on = 'week_starting').agg({'price':'mean','volume':'sum'})\n",
    "\n",
    "days = pd.date_range('1/8/2020', periods=4, freq='D')\n",
    "data2 = dict({'price': [10, 11, 9, 13, 14, 18, 17, 19],\n",
    "           'volume': [50, 60, 40, 100, 50, 100, 40, 50]})\n",
    "df2 = pd.DataFrame(data2,\n",
    "                   index=pd.MultiIndex.from_product([days,['morning','afternoon']]))\n",
    "df2.resample('D', level=0).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e17fdbf-8b47-4388-9ab6-51f7ae7dc071",
   "metadata": {},
   "source": [
    "### 时区表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "793b5afd-8b38-49ce-ba74-7f2a45998360",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-08-01 08:00:00+08:00   -0.598066\n",
       "2012-08-02 08:00:00+08:00    0.448267\n",
       "2012-08-03 08:00:00+08:00   -0.117459\n",
       "2012-08-04 08:00:00+08:00   -1.141498\n",
       "2012-08-05 08:00:00+08:00    1.369952\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('8/1/2012 00:00', periods=5, freq='D')\n",
    "ts = pd.Series(np.random.randn(len(index)), index)\n",
    "import pytz\n",
    "pytz.common_timezones # 常用时区\n",
    "# 时区表示\n",
    "ts = ts.tz_localize(tz='UTC')\n",
    "# 转换成其它时区\n",
    "ts.tz_convert(tz = 'Asia/Shanghai')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d73208f-b879-4920-92f7-b148a13e9355",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 数据可视化\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "3a7a587c-da4e-4dec-89c4-722711ce5d68",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGtCAYAAAA4bV9OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD6k0lEQVR4nOyddZhUZRvG7+mdzdnuAJalWbpTQkAFpFTKQEWxsBMbUexODErEjxSkQbph6V62u2d3dnq+P945NXNmu3l/18XFnJgzZ+uc+zxxPxKbzWYDhUKhUCgUShNE2tgnQKFQKBQKheIKKlQoFAqFQqE0WahQoVAoFAqF0mShQoVCoVAoFEqThQoVCoVCoVAoTRYqVCgUCoVCoTRZqFChUCgUCoXSZJE39gnUFqvVioyMDHh5eUEikTT26VAoFAqFQqkCNpsNWq0WYWFhkEpdx02avVDJyMhAZGRkY58GhUKhUCiUGpCamoqIiAiX25u9UPHy8gJAvlBvb+9GPhsKhUKhUChVoaSkBJGRkex93BXNXqgw6R5vb28qVCgUCoVCaWZUVrZBi2kpFAqFQqE0WahQoVAoFAqF0mShQoVCoVAoFEqThQoVCoVCoVAoTRYqVCgUCoVCoTRZqFChUCgUCoXSZKFChUKhUCgUSpOFChUKhUKhUChNFipUKBQKhUKhNFmoUKFQKBQKhdJkoUKFQqFQKBRKk4UKFQqFQqFQKE0WKlQoFAqFQqE0WahQoVAoFAqlkTiXVoyn/jyNHK2+sU+lySJv7BOgUCgUCuVW5a5vDgAAyo0W/HJ/r0Y+m6YJjahQKBQKhdIIWK029vWlzJJGPJOmDRUqFAqFQqE0AmfSitjXMqkENpvN9c63MFSoUCgUCoXSCGxIyGBfpxTo0OmtbTiZXNiIZ9Q0oUKFQqFQKJRGIK1QJ1jWGS2Y/9fpRjqbpgsVKhQKhUKhNAJ5pUandfki6251qFChUCgUCqURyC8zAADaBnmy68pNlsY6nSYLFSoUCoVCoTQCeVoSPekepWHX0XpaZ6hQoVAoFAqlgdEZzWz0pHO4j2BbQRlN//ChQoVCoVAolAYms5g40borZQj0VAm2nUgqaIxTarJQoUKhUCgUSgNzLbsUANAm0BOD4wIR4Klkt13K1DbWaTVJqFChUCgUCqWBuZ5DxEjbIE94quQ48PJteHZkHAAguaCsMU+tyUGFCoVCoVAoDci1bC0+2X4VANAuxAsA4KaQoU2QBwAgOV/n8r23IlSoUCgUCoXSQPxxKAmjPt/HLo/rEsq+jvFnhAqNqPChQoVCoVAolAYgq1iPtzZeYJfHdQlBpJ87uxzlT17nlRpRajA3+Pk1VahQoVAoFAqlAcgq0QuWP5kaL1j2dlPAz4MU1dKoCgcVKhQKhUKh1DM2mw0zfznKLn88pSvclXKn/aLtURVap8JBhQqFQqFQKPVMelE5m87pHqXB1F6RovtF+BKhklFU3mDn1tShQoVCoVAolHqm3MjN8MkpMbjcz89dAQAo1FF3WgYqVCgUCoVCqWf4xbFB3iqX+2ncSY1Kkc5U7+fUXKBChUKhUCiUOsJgtuBIYj6MZqtgvY4XUflwUleX79fYIypUqHBQoUKhUCgUSh3x/qZLuPenI/hk+xXBen59CmPyJoavPaKy+VymIF10K0OFCoVCoVAodcSyI8kAgJ/2JQrWl9mFiqfKudOHDxNRAYAvd12r47NrnlT8HaNQKBQKhVJtlHISB0gvKodcKmGFiodISzIfD56QOZVcWH8n2IygQoVCoVAolDrGR61AjlaPIYv3INBThZn9ogAIhYgYHUK92dcmq7WCPW8daOqHQqFQKJQ6oETPFcB6u8nx94k0WKw2ZJXocTW7FADgqZJVeAxPlRybnhoEALiZ13TcaW02G65ma2G2NLx4okKFQqFQKJQ6YOfFbPa1TCrB4Rv57PL59GIAlUdUACDUxw0A6fwxNYIwEGPnpRyM/nwf5v+V0OCfTYUKhUKhUCi1wGaz4d9zmXhu9Rl23dXsUhy4nscuJ9qjI8HebpUeT+OuhERCXjcV47dtF7IAAJvOZiKtsGHt/WmNCoVCoVAoNcRms2Hy94dwKqWoSvvHR2oq3UcmlcDPXYn8MiOuZGnhrpRX2i1UnyTnl+F/J9PY5WM3C1ir/4aARlQoFAqFQqkhRTqTQKQMjQsUbJ/YLYx9LZNK0CHUtYcKH2aK8qwlx9D5rW2446v9DTZROb/UgMTcUuSXGmCx2vDWxguC7ScbuBuJRlQoFAqFQqkhuaXCuT0PD26FrGI9rDYbNj45CJvPZWJ9QgYAINBTBZW84mJahlSH9MqFjBLM/ysB6+YNrJsTd8Ev+xPx/uZL7PJjQ9s4TXLOLNbX6zk4QoUK5ZblfHoxVHIp2gZX7QmHQqFQHMnTCoVKuEaNLc8Mhtlqg1Iuhb+nkt0W7FN5fQrDtF6RWHo4WbDudEoRdEYz0gvL6+26xRcpAPDD3husJwxDflnD1s3Q1A/llqREb8KdXx/AqM/3wWK1NfbpUCiUZgo/ohLkpUKErzukUgl7cw/05AYQBnu5HkboyEtj2uOPh/qgvYPd/pTvD2PU5/uw9XwWu85aR9cwV5b9RrMV/h5K/O+x/gCAQipUKJT6h/8UlF3SsGFMCoXScnhmVQIA4Lb2Qdj5/FCn6EMAT6hUNDXZEU+VHEPjAjG5R4Rg/cXMEgDAa+vOAQC+2HkV3d7djus5pTU5fQEZxeUut/WK8WXrZqhQoVAaAP7I9bRC13+cFAqF4gqdkbuOtArwgLebwmmfYG8VRrQPAgDER2iq/RluSvGaloIyI2w2G77YeQ0lejO+2Hm12sd2JLOIPLTFBnlizeP9MaNvFLvt3j5RrFDRGswwmBtuYCKtUaHckpSU84WKDn1a+TXi2VAolKbKgWt5yCs1YGL3cKdthTrOifap22JF3y+RSPDz7F5ILypHhK+62p8vYwxVRMjgFbXqTVb8cyYDHUK9ERvkWe3PAYAse3Q51McNPaP90CHUGwGeKgR5qzAsLhA2XoZp0b+X8fb4TjX6nOpChQrllqSAZ6KUUUQjKhQKxRmTxYqZS44CAHpG+yLST+gdwqRAgrxU0Lgrnd7PIJVKnN5bVUZ2DMJr64BOYd64kFEi2Dbww93s652XsrHzEnHGTfrwjhp9ltY+AsBbTSJD7ko5nh0Vx27na6aDPDO7+oamfii3HCaLFU//eZpdLigzVbA3hUK5VbmSpWVfi7XkFtkjKr4ViJTaEuTlhoQ3R1WrLdlorpntPjPh2bOCCc+HX70NAHAtp7TBalWoUKHcciQ5DPoqLqdChUKhOHPOPp8HAHK0zkKFsbfXuDvXptQlGncllHIpXh3bHj5qBbY8Mxgv3t7O5f6JeTUrrC01kLqTiuYRhfqo2RTWtToo4K0KVKhQbikuZZZg1Of7BOuoUKFQKI6kFuiw0W7UBgC7L+Xgtk/+w5Zzmey6IrtQqc+ICp+5Q9vgzFuj0SHUGw8MiMHtnYLxwug4rHq0n2C/xNyaOdiyEZVKJjy3CvAAACRVwSl3/el0rD6eWqPzYaA1KpRbitUnnP9gSqhQoVAoDgxevEewvPZ0OgDg8RWncPm9MVDIpKzxma9H/UZUxPBQyfHjrF4AyLwhPjUdZMgIlcomPMf4e2D/tTyn6LQjpQYzO235VEohFk3qAkkFxcGuoBEVyi2FVm92Wleip0KFQqFwVNZ6237BVoz6bC8u2otbo/w8GuK0XCKRSODlxomLIl3NrmmMbYOnW8VCpXUg+Xodi3sducFLDa06noqE1KIanRcVKpRbijKef8qPs3oCaJqpnxNJBfjjUJLTkxKFQql/3tpwodJ9EvPKsP0i6bLpFOZd36dUKVueGYwwu0V/URUiKnmlBsz45QheX3cOqQU6/HksBZftxcOVTWpm7ByOJxVUWLh7I1dYw7L7ck6l5yVGgwiVjIwM3HvvvfD390dAQAAmT56M9HQSRtuxYwc6d+4MNzc3xMfHY8+ePZUcjUKpOWV2i+hPp8ajQwi5uDg+fZQazPj3XCZMlppVzjtitdqw7HASzvMK8ypjyg+H8dbGC2j16r9YcTS58jdQKJQ6Y1U1aiqkkqYhVCJ83TGzfzQAob+LIzlaPSxWG3ZfzsHB6/lYcTQFgxfvwatrzyGlgAwf9Kig6wcAOoR4I8hLBZ3RgnWn01zudzVbKFTyHAY4VpV6FypGoxGjR49GQUEBtm7dik2bNiEnJwdz585FcnIyJkyYgEGDBuHo0aO4++67MX78eFbEUCh1DT8HG+ilglImRbnJgqEf78FNe7511pKjmLfiFFYcqRuBsP1iNhZsuIA7vz5Qo/e/vu686PrCMiNSHKaaUiiU2qE3Vc9x9dvpPeDvWXVr/PpEoyZFvadSCgUzzEwWKwrLjEhILUKfhbvw/OoEZFcwAVmlqFgaSKUSPDiwFQBg01muuPiZVacx45cjMNsf8s44pHpKRFLvVaHehcrJkydhNBqxfv169O7dG/369cPHH3+MPXv24JdffkG7du3w/fffIz4+Hm+//TZ69OiBX3/9tb5Pi3KLwgkVGdRKGYa3DwQAJOfr8PbGCzCYLTidUgQA2Hgmw9VhqgW/VbCuojQAMPTjPRjy8R7RtkkKhVIzHCOsP8/u5XLf0R2DMbZLaH2fUpXxtbdJJ+aW4ZlVnFfUS/87i76LdmHe8pMAgPUJGawLrRhtAit3th0aR66dp5ILYbZYUVxuwoaEDBy8no8LGSWwWm04m1YkeI9YjWBVqHeh0r9/f1y+fBnu7pwrn1QqhcFgwJEjRzBx4kRBFfDYsWNx6NCh+j4tyi1KmVFY1T68XRC7LbtEj2u8UGWYpvp212K4K7hWv+QqREDyRcKj/NlEAJnzwTydVFbQRqFQqk5ROVff8dyoOIzqGIxfZveCRAK8Nq49u23ukNb46r7ujXGKLmnDs84/erOAfb3udDqMZqvAcn//NXFn2YcHtarSta9diBfUChnKjBakFpYLOoD2X8vFmbQiNtX+8ZSuADjn2+rSIO3JUqlQD3344YcYPnw40tPTERMTI9jWqlUrLF++3OWxDAYDDAbuQl5SQi/SlKpTxhga2XOw/Vr7s9ui/NxxLYdzoszV1iyf6kgRr1h379XcCudwnE8vFk0R7bmcg9GdgqGSE9FzNDGf3aZ3MZqdQqFUn8Iyxm1Wwc7vGdkxGBffGQM3hRQ+agUKdSbMHdK6Rq229UlcsBdWPdoP9/50BLlaA/QmC1Ry8XgEU4/CoJRJMTDWHy9UYCTHRyaVIMBLidSCchSUGZBawI0i+WT7VXyynQxJdFfKEG43iGuyERU+NpsNzz33HHbv3o2vvvoKBoMBGo1GsI9arUZ5uevZK4sWLYKPjw/7LzIysp7PmtJSOHazAAV23wMPu6FRTIAHRnYgURW92Soo/sqpK6HCCyW/t+ki1p92XYPl+JTTIZQU6T3152m89L+z7Prv/rvBvj56swAWqw0GswUrjiaLRmQoFErVKLZHVFoHegqEiFopg0QiwT29o/DY0DZNTqQw9G3lx3btJOfrsOTAzSq976v7uuG3B/vATVGx2RsfPw9Sm5NfasTFTPGgga+7kp0qXdOISoMJlfLyckydOhV//fUXduzYgQ4dOkCtVsNoNDrtp1a7Dju9+uqrKC4uZv+lptbO8Y5ya1ButGDaj4fZZX5V+729ySjzYp0RqbynjIyicqQV6rD5bGaNZ2cAzuZL8/9KcNkSfTVbK1gO9OKK9DYkZKCwzAiD2YLzGVwH0e+HkvDi32fw495EvL7uPCZ8e7DG50qh3Mp8tuMqHlt+CgCgUTe8iVtdIJFwAxAXrD+P9zdfcrnvsddH4K9H++G1ce1xe6eQan+Wvwcp3i0oM7ocUujroWA9Xpp0RKW8vBxjxozBlStXcPToUfTu3RsAEBUVhaSkJMG+ycnJiIiIcHkslUoFb29vwT8KpTIc2+L4zovMnI6icpMgimIwWzHooz14YuUprDnFteCl5Ovww94blZpCMTCtgkoZ9+cW/852NrrDx0moOHQTvPi/s0gtKIejvcra0+n4y95SmVZYLqj4p1AolXMzrwxf7brGLgd5uzXi2dSOCd3CAADHkgoq3C/QU4W+rf3x6JCaRYj87ELlx32JLmvlfN2V8LJHVHRGC9sRVB0aRKg88sgjKCoqwv79+wUiZODAgdiyZYtg323btqFfv36Oh6BQaoVjJb+Sl7dlhYrOhDy7UAnwFM7u4A8nG//tAXy45TJ+3pdY4WeaLVa8vfEC9l3NBQD8fH8vTO7B/f6vc0gB2Ww2tkWagR9RAcgo95QCcdvq9CIuZeqYf6ZQKBXD/J0ydA5vvg/BDw9qBbdKWowB1Dp95W+/Tjpet/ho3JUCAznHxoCqUO9CZcuWLVi9ejUWL16MoqIiJCUlsf9mz56NEydO4L333sPly5exaNEiHD58GA8++GB9nxblFqOAl35Zcr+w3TDQkzw5FZebkGj/g5vQLVywz3W7FXRmcTkrenZV4rJ44Hoefj+UxC63D/FCkDcnPORS4UUiV2uAzqEwVibyF3o+nTy53NY+CJF+4mlSsWgNhUJxjWNtF1Mf1hyRy6RoH8Kdf5dwH7bzhuGu+LBaf45YG3O3SI1g2c9dAaVcyhb1Mumf40kFOJNaWKXPqXeh8vfff8NkMmHMmDFo1aqV4J/FYsHmzZuxdu1axMfHY9myZVi3bh2io6Pr+7QotxiMpXT/1v4Y0SFYsM3HXcHOrmBgQqcMV7O1sFhtAoO1K1naCj1MHItxg7xUmNWP+912LCxLsh9bKZOia4QPPpkaj9EdSd64V7Qvux8TiRnTKQQbnxgkOmK+KhbaFAqFg3mY6RDqjbfu6ogeUb6VvKNpw38gG9EhCFN6RmD13P44vWAUNj01CO9P7Fzrz7i7e7jTuj8f6Yd+rf3Y5WC7rb8XW1BrxpUsLab+cBj3/3q8Sp9T70Ll119/hc1mE/0XExODwYMH4/Tp0zAYDLh48SJuv/32+j4lyi1IYSVTToe0DWRfq+RSdAn3EWwv0plwIqmAnZYKkHzrp9uuuvxMfnsz08oYplHjsaFtAAAFZQ5CxR7N6dvaDxufHIQpPSMQH6nBmTdHY/Xc/mxBGhNm7d/GH74eSnw4qYvTZ9OICoXijM5oxsLNF3EmtQjXc0pxKoV7omdqye7pFcG6rjZn/D1VeHJ4LCJ81bivTxQkEgn6tPKDr4cSncN94FMHxcIKmRRD4rhrZ6sAD6iVMvYaBwChdqHibb9+FZebWDM6cxVr6ehQQsotQYH9IqRxV4puf5HnHSCXSiCRSDCifZBgn0M38tmiXOaPfOuFLJefmWN3fpw3rA1eHdeBXe9nF0tHb+YL8rVJ+USAxPgLozs+7gpIpRJ2NhFA5oswF4DbO4Vg3bwBgvfUdHoqhdKS+XjbFfy8/yYmfHsQoz/fiynfH8K5tGKsO52GzXYreF8P8WtEc+SF29vhwMu3IbgeC4O/vrc7JveIwNjOIfj1AdIoE+rDpaSZ18yDVnJ+GTv8sKpQoUK5JUi0T/EMdfEHy+8CMtlV/jfTe2Dlw33x5p0dARAztrxSEqm4zS5iistNKNGbsPlsJi7wWoaT88vwx2EyK8jxIuFrF0sXMkrwwK/H2AnJrFAJEB8ZLwinertBbi9gkUgk6B7lK3DNLBBJ/RjNVhjMFuy7mlvteSYUSktg1yWursxqI/9WHkvBs3+dYdf7uniYoYjj467Ap9Pi8f3Mnmhlv3aF8K55TGMCk/rJKHLtk+aKBnGmpVAaE5vNhuP2Nr1eMX4u93t2ZBw+33kVn0yNB0AMngbEBrAdQhcyShBij2JE+rnDz0OJgjIjPt56BcuOJMNHrcCZt0aj3GjBpO+4MRCOdtT8tscTyYX4ctc1eCjlbMFujL87xOjb2h/YfR0AF03h8+iQNig3WvH5zqv4/r8baB/ixRYFf7r9Cr62vxcAnrotFs+PrpoDJYXSUuD7F0klRKj8eSxFsA8VKrXHWy3HoNgAlOhNbISYiaikF5FIs5tCCrOlarESKlQoLZ6UAh2ySwxQyCToHqVxud8Tw9tgYvcwRPkJhUKEL1nOKtFjxVFyUQv0UiHCV42CMiOW2acsF5ebYLZYcTqlUFDL0r+Nv+B4fVsJxdIXO68Jljs71Mcw8Iv7WgWI2/AH87qKnlmVgAndwvHL/kSBSAHIkyUVKpRbiRK9iRUqP83qCW+1Avf+dESwz9C4QLQP9WqM02tRSCQSLJvTh30NcEKFiahE+3lgTt/WuOeTyo9HhQqlSWKz2ZBWWI4QHzcoxHp0qwEznKtrhKZCe2i5TIpof+e0i1hXTXyED1ILdDibVgy1QoZyeyrlvU0X2dcAGWrG9xAAADeFDMvn9MVHWy8L/FkAEk1xlU9WK2V4ZkRbJKQWYcGdHUT3YUQVw/UcrcCZMszHDRnFetzILYXJYq3195ZCaS6k2WfR+HkoMbpTCNIKhV5D594ezaYnKLXH0aOF+d4yHk9ebnKM6Vy1ydNUqFCaHBlF5Zi15Chu5JZh3rA2eGlM+8rfVAHH7UKlTyvXaZ+KcFPIBGIEADqGeqNTmA9m9YtGqI8bbvt0L1IKdGxdCkB8Cp4e0Vb0mIPaBiDYOx6jPt8nWH9754ptrJ8dFVfhdmb4F8OWc8Ji34Ov3Ia2r2+BwWxFfqmRTWVRKC0dJvIZYf8b4T8QvDauPRUp9Uy7YBKpYowpmQhLVaCPU5Qmx6jP9uJGLiksPeBifkR1YGykaypUADJJlWH+yLaQy6SQSclMDblMyl78+PhX0j0gZtE9o0/tPITCNMJj8t1qP5zUBRKJhI0QrU9Ir9UMIwqlObH3CimkZbrn+NHE5u6Z0hzo21p4/a2OMKRChdJk+PdcJp5bnYAynjtrRpFrQ7WqUGowI9lupFabixG/rdnRtRYAJooYH1U2hdRb5InCldNsVVHJZQKb/jNpJLX09l0dcU9vMmmc+Vo+3HIZi7dertXnUSjNAZvNxnbsPTUill2/4YmB+PLebhUW2VPqhig/d9zZlUv1JFdjzAcVKpQmgc1mw7wVp7D2lHD+TV6pAeXGiltpTRUMuWJM1zyUsloZHKmVnOjw93SOlIwXsaMuN1Y808Ixh8tEPGrLp9PiWRvrS/bR6xG+7uyx+dGhX6o4Ap5Cac58vfs6jPbrRABv0Gd8pEb0wYNS90gkEnwzvQfah5AU0PB2gZW8g4MKFUqdcvB6HjKLq98nn+7QW//gwBg2h8n4izAwviM5Wj0mfHMAbV/fglUOLYYMjEFbgMNwv+qi5kVHvFTOkRA3hYwVAK0CPBDgqcT9A2IqPe4bd3RAz2hfnHlzNO7tE1Wrc+QzupNwTAB/xpBjpEdXiaCiUJo7n+3gHKQri3RS6pc1jw/A4ildMWdQ1d1/qVCpIxivjj+PpbA30luNI4n5mPHLUUz45iAA4Fq2FmtOpsFSBZvkvQ6TSyd1j2CHgvHHh59MLkCP93Zg9YlUjPhkL5vaeGXtOdHjMtOQK6sXqYx3J3RCgKcKQ+MCXUY9/n1mML68txt2Pz8Ux18fidYiA7sceXhwa6x5fAB8RDqLakNPhzRXOM/LxVH4ZRbXLr1GoTRlrFW0aac0DB4qOab1iqxWjQrt+qkjXvj7LNacSgNAjITu6V13T8fNhe0XsgGQYXypBTq8svYcTiYX4lJmCd6wu7uKcTqlEK+vOy9Y1zncG13DfXDsZgHOphWhfYgXnludgKvZxBTtpf+drdI55dn9TPjh3prQOtATB18ZDmUF7byhPuomE0bme7FM6hEOf97XH+XnjtQCLoKVVawXnYJKobQExFyaKc0LGlGpIxiRAgCb7DMjbjUuZnKeIDsvZeNkMhn49fuhpArf9+854fdr9dz+kEgkaGfPZSbmluGDfy+xIqWq6IxmpNijB7VN/QCkULUuakgaAg+VHAvv7ozHh7XBIoehhe9O6Iy74sMQZP+e1EVEpaDMSG35KU2S7BLu9/u7GT0a8UwoNYUKlTrA7FDMWViJgr+YfxFD/xqKZReX1edpNSgnkwtwJLGAXV5/miuKZSzoXcG/+Se8OYptI460O8RezirB4cT8ap2PxWrDmC/24+f9pFi0lYiRW0tnRt9ovDymPVRyYU6+TaAnvr6vO4bZi9kcja+qS3J+Gfov2oXZS47V6jgUSn2QY0//dgj1xrguVTMYozQtqFCpAz7cImzx5M+TEOO9w++hQF+AxccXY/6e+TBbm38x48aEDACcqQ9TOwIA5SaLk5jjwzzxvDauvaANmKmryCs1wmarXvomV2tgHRABoGcM9UlwJM7+s/pi5zUcraYQ5PP5jqswmK2sX82tgNlixbQfD+PhP07csjVpzYXcEiJUguogqkppHKhQqSV6k8WpxbOg1HVExWK14HoRN3dlV8ouJOQk1NfpNQhWqw1bzhMH1Pkj20LqkB2x2cB6GIiRw15IhGZloT5ukPEO1reVH1Y+0pddlkslrDACICja5XcRRfu7o3OY+PycW5n7+kSxP6u/jqfW6BgWqw3/nufcb2+VwsXUwnIcu1mAnZeyWXNCStMkR0sehKhQab5QoVJLmDoMAGgbRAoSy4wW0Xx9SkkKui3rBr1FWBOgM9cu9F6fHLiWh8eXn2T9SBjKDGZM++EwvvvvOk6nFiJHa4CXmxwjOgQ7DfUDgL1Xc6DVk0jTlSwtNiRwqSGmndnxQiKXSQXdOoFeKvThGTO5KWT456lB7HIJL5LFDL6Kj/DBzueGVpp+uhXxUMnZnP2plMIK/WhccTqlUOBuW96C61SWHk7CX8dJGzw/vbv/Wq6rt1CaANn2ByFXM7QoTR969a4lTH7fXSnDikf6Qm5/RBWrU/n+zPfs6whPzj20UF/otG9TYeaSo9hyPguLtlwSrF97Kg3HkgqweOsV7L1KbO6HxAVCKZdivEjny8trzuG51Wdgtlhx+xf78MyqBBxJzEdibimS8nWQSyVob29H5sM3adO4KyDndd2UGsxQyqVsiog/4I+JqLQK8KCD9yqAceRMytdh2Mf/VamVnM8+h7byMkPzT2OK8e2e63hzwwW8vOYc9l3NFXzdB67VfswDpf5gIyreNKLSXKFX8FqQo9WzbZ53dg1FkJcbfO0RgKySUhQbhJNxLVbuaTM/px1GR40FABQZihrmhGvBjRxhx02pgftaVh4lw74GxwYAAJ66LRZv3tkR707ohEk9ONGy42I29lzhLvDHb3IFuH1b+8FPxOuEP7iK2T6zH2n9vqcXsYQf0MYfALD1ApeCYCIqjkP6KEL4dT/pReW4nFVSwd7OOPrflFXiItwc0epN+HjbFXZ59q/H8MXOa+wyM52b0jRhimlp6qf5QoVKDbmarcXAD3fjmz2k3oSpryB/DDa8d/x5jPx7JG4Wc/UrSil30yws9ka5nrynqUZUBKkAh7ZcfsEwU38yqC0RKgqZFA8NaoXZ/WPYCBMDM8EUAC5llbAFr22DvCCGtyCiQoTKO+M747sZPfDqODJV+W77nJ2/jqfiSpYWACdUwjRUqFSHO746UOnIAoYinRFn04VivKVFVLR6E77Zfb3CfUoNZjrcsQnD1MAFetHUT3OFCpUa8veJVJgsXJicCSt2CPWGTJ2Ma9rT0Fv0WHJuCbtPWgkXIjYVd0dJGXlPU42opBVyBalpBTpB3U2Gg+V9uEaNCF/n2pSZ/YTTgPkh88TcMqTahYrY9GEA8Oa5FzIW9TKpBOO6hLLCZUBsAG7vFAyL1YbfDhJhmG4fZkiFSuW0ChC2bnd/b7tol1ZmcTkKy7iU5vWcUths5Gff2n6M5iRUbDaboPhXLO31/Ooz+HFfYqXHak5f962EzWZj6+uCaeqn2UKFSg3JKhEWl/p7kD+CrhE+kLpxhaIbbmzAtUISJs7Qkpt0edp0wKbE0evkGLnlTasYz2q1IatYjxO8dtP8MiNmLTnKLjvO5gl0EVbtGqHBnheGYWI356F9KQU6NqISKVKACwDeai714+vu2gZ/ak+SBlp1PBVf7bqGdHvtUDgVKpXyw8yegmW9yYrNDiZ8xToT+i/ajSEf72HbcRkhG+mnhruKeLXomlHqZ9aSYxjz5T4YzVbsvJiNTm9tFfj/6E0WbL+YXaVjlVKhUisOXc/D9ZzqGTpWhSKdiR1G6OoaRWn6UKFSA2w2m8B3onuUhk17jO4YArlKmMqZtHEShqwajkwDKUgd2IpEGawm0jJ7PT8NTYl3N11Ev0W78MG/wgLa40mFOJlciHf+ucBeVELslfTPjGjr8nitAjwEF4k5g1pBIiE3NaYAlumYcoQfUo/yFxczANAjmvNJ+WzHVZToyY0j1IeGeyujXYgXJnUXFkBfzBTWqlzIID8nrd7Mpv2YQvIIX3d4KImgLGsmAw61ehMOXM/D1exSXM4qwcNLT0BvsmL+XwnsPpcyq16v01y+7qbIlSwtpv9yFOO+2o/EXHGxsvV8Fh7+44QgolcZZouVfRDSuCucjA8pzQc666cGXM7SIkdrgFohQ8JbowR/ACE+btB4a+H451Zo4NI+Tw8ZiL1nz8NmIjfXbF0WLFabwDOkMWEs7wt1zsZ1k78/JFhe+Uhf6IwWwWwZMbpGaNjXC+7siK3ns9ioTLhG7ZR+YODbu3tXMMRKrBDX201ercFXtzJvje+EAbEBuJBRjN8OJjnVqeSWchHElAIdNO5KNqIS4atGgf0G0pApkLNpRUjMLcPE7tWbr5RaoMO9Px1hl/NdePycTSsWXc8nzMcNGcV6mvqpBdvtRfBGsxW7L+eIDvN8bPlJAMDnO69iYGwANiZkYNHkLvBSyWEwW0UnIs//K4EdZ0ILaZs3VKjUgGv2aELncG9WpNhsNiw+vhiHMw7DKCPRFpWpPQwKoWutUuKFnhHR6BqRirMZ5OJvkejw0bYEvDa2e63Oy2az4eNtV+CmkOHpCiIcdYVSLkWrAI8qzb+5s2so9CYLa4//ytj2eOrP0wCA6X2jXB5j3rBYHLqRj6dui630M/w8lOwNEwDCRWpmKOL4qBWY0jMCeXZBUmYQCpVUnstvSoEOYRo1VtlN4iJ83ZGcT7ZnFOnrXXSXGcx4f/NF/HmMfL6HSo5RHYOr/P53N10UpC4f/P04+9rbTY7DN/Jhtlor7IDq19oPn0yNxyNLTyKjWC/ogqNUj1MpXAQ6q5K5U8n5Oiw9TERLTIA7inQm/O9kGrY8M1ggcIp1JsHMtSi/W2+ERkuCpn5qQI7d8j3Eh6t/mL9nPpZfWo4bxTdgRBEAID/5ThgL+mNSyEKYdSTdMzBwCgBg6UN9sOKhIbBZyDF+OXy61ue192ouvvvvBj7bcbXGT3hiBYVTe0aI7Al4quRVHtInkUgwtVckou0zd+6KD8OeF4bhh5k98PjQNi7f17+NP868NRrzR8ZV+hlL7u8laE6i1ubVx13J1JoIf3/40YUnV55Gr/d3ssuRvmqE2FNsX+66hgd+q9+ZP6tPpLIiBQB2VrGOhMGxEJxPid6M+34+gllLjuF8umuh0jVCgwhfd3jaa3NoRKXm8Iv2fzlwU/CwAQivSVbe33RWsQErjqbAYLayM70Ytl/MEixP7SV+DaM0D6hQqQGM6g/hVZHvTt0t2Mdq9oTN5A9D9gT8sUeG8tQHUHrjeUyNnQWAtNoOjA2Al5wMhgv0rZ0Nt85oxsN/nGCXa1rcdzrFuVV67tDWom6zDw2MqdFnMLQK8MCYzqGQVvL07amqWuCve5Qvbi66g62HGWT3daFUHXd7rQm/KDZHq8fOS67FQISfO8J4tUD7r+XVq0jkz3ACgONJBRV+3uWsEiw7nIRjdr+TqoqKc+muUz9MTRXz/cop0WP/tdwaufveChy+kY9ZS47ihkMNis1mcyrM//4/YTt4Pi/tuJ9nrsePxDDdW1arDRsS0gU+Nz2iNBjVoeoRN0rTgwqVKrLsSDLu+voAcrR6ZNkjKowls9hF0qoPAcC7AVvVsBkD0dHBfbVjIIm0lClOwGARdhI5kl2ix9sbLzj9sQPAT/sSYeY9eVRXqOhNFvx28Cam/HDYaZu3WsG2BjN8NLkLHh9WeTqmMdg2fwheHdsejw5t3din0uzwsEdUrmZr8fbGC8grNWDP5RxUZFgb7KVCqI+wuyoxrwyjPtuLN9afq/NzZEwW+Z/16tpzomkDm41M0V6w4QKm/XgYN3JLWaGz5vEBOPPmaHw2LR7vTugkGNfA574+pKPs6dtiEeytQoCnEnd2JV1santtxNv/XMSsJcfY9niKkJfXnMX+a3kY9+V+wfpCncmpU8zRNDDTRTroZh73cMc4gW+7kIVnViWw4uejyV2w/OG+lT4MUZo2VKhUkQXrz+NcejG+23ODNRBihIqYD4rVrHFap1bI4O8wATjahxQCSrxO4bEd8yo8hxf+PoPfDyVh1i9HnbYlpArPoVRfNaFitdqQXaLHoI92451/Loru4+2mcCpWvad3VJMp/nXEz0OJuUPbOA05pFSO2i5UMov1+P1QEhasP48TSeTJVay9855ekZDLpE7t5Y8uPYFrOaVYfiQFJXoTDt/Ir7MoS2Kes1BfdTwVwz/5z6kr5JGlJwXLIz7dC6uN1KL0iNLAx12BST0iMLt/DCwi5ze7fzTen9gF2+YPwfyRcdj+7FDsem4Y+31ytGX/7WBSLb+6lkmJfc6XwWwV/B4k5xOxwf/dWnk0hY3snk8vxpN/nqr0+NsvZmPXpWwkpBUJ1o/qGMJGvSjNFypUqgB/IN/vh5LYcfZMXl7MB2VqfGeMaB8kWLfp6UFO+0V5cx0LJ7KPoUDv2o778A1SpJtRrMeQxXvYankArCMrQ2URlUv5l5BakopfDiSi7we7Kpxu7KaQCczc/n6sf4XHpjRfPBzSbMeTCtkC2y4inV2LJnUBAMQFe2LeMK7WiD9RePaSY7jv5yP4+0Tt2/DzSw1ItB97zqBWeGBADLut3GQR3NRsNpvLlJXVBqf6KrGU0Ft3dYJMKkG7EC9IpRL4qBXw4UUX5zrUV1Xk9XMr48f7vpTwHqKY61b7EC98M51rJrj7O9JdeOfXB5wiaK6Y88cJp++/YySY0jyhQqUSvt1zHb0X7hTdxniIZJZmOm3rHhaDUA33RH9Pr0i0EWm7i/ASFnmJHYuBH75MKdDh0WUnYbHaUGYws+HRWHvuXFtBRCVXl4tpm6Zh3Lpx+ODfyy7346Ph/cH3jPKtYE9KU8dkNSEhJwEmi3P7udqhzdNTJWOLG2MdvG7en9iZ/Z2USCR4aUx70c9jon0/7L1R21Nnp5XHBXtiwZ0d8fodHfDI4Fbs9oPXOX8jbQVifZp9ThQfsSfvyqKG4Ro11jw+gF1mIi0UjpPJhUjkpWn4D36XeULF0UXasaC7fQg3ZsPLLqj533sA7IR2hqoW+1OaNlSoVAJ/GJkjgV4q2Gw2bLixAQCglnN/aCEeIfBUcTf3YBfGY1HeUYLlYqPrAj6xeSJLDiSyIsVTJWedWCuKqCSVJHELEuebFQC8PKY9Pri7C1Y92g8A0IMnTmi+t3mSq8tFVlkWvkv4DrO2zMJXp79y2scxopJaWM6OI+B73ex7cbjTeAQAeGlMO5efn1ZBt40YYr/v2fabHHMuCpkUL7sQSHx/lNfGtUe/1n5YPbc/fn2gF54d5dy+//V93eHvoWQLZadVsVOkZ7Qv5g5pbf9MA4p1Jmw5l1ntSdQtlYd47d8ABA7XjKleuxBvxEdo0IFXw+c4lfq1cR3w2NA2+O3B3jj79mgkfjAOPaN98d7Ezuw+/OjLnV1D6/TroDQeNHlXARXl1N0UUrgpZDiTewY7kncAAL667Sssv7gcXkov9ArphYSrXAslE31xJMJTeDEsMYi3RG49Lx5p+eDfy6yHQ7C3Cp72acOl9ieLhNQifLnzKl4b1wFtg8kTidXG3QAkMh1sZi6kPzDWH/f2jsLtnUKglHM6dli7QLw7oRPaBYsPD6Q0bYoNxZjyzxSUm8tRbiYX898v/I7nez0v2M/dISJgsdrY1E/vGD/0ifFDkLfKpUvwvGGx2HYhG2ccaqYAceHhisTcUtzx1QHc1ycKb97VkV1fZI/uaNRciF8ukyI+UsN+5tHEfPRt7c92i0T7u+PRIW3w6BDXbfAAMCQuECfeGAmjxYqjiQWs509VmNkvGj/uS0RSvg7x724HQNyanx1VeVt9S4c/wBQg9U/Xc0rRJtADV7K5iIpMKsHGJwei7etbAAinoQNAn1Z+GBIXyC4zwZJZ/aKxYP15AMDGMxkAiKXCAt7vDaV5QyMqFcAPUd7TKxKX3h3DLsul5Ft3vZC00vUO6Y1+of3wzYhv8H7XV5D7witovfcfwC52QnzEnRHdFe7wUHAh9UJ9kdM+GxLS8dhy1wVlX+++BkgNsPluxkXrx5CqstiIyqNLT2DPlVyBqZXWyNWzSGTCtuhfH+iNO7uG4t+kjTiZzRUiSiQSzO4fg76t/V2eB6Xpsv76ehToC1iR4ooATxW6R2nQp5WfU41VsLcKqx/rj2+m96jwGBW1rVe1fffjbVdQbrLgV4cumiL7TU/jUHuwhlc3dc9PR/DcX1znh6tuHjEkEglUchmGxAWKup26IkyjdhJ5X+66Rr18XLDzUjaySwwo0pkgk0rYtKJCJmWjwrsv57D7PzOibYU/D8dalP5t/Ct0sqY0L6hQqQAmrxrhq8ZHU7oK8s/MtN8cHfljivbmwuCl+w9Au2UrYlb9hMnX/wMAdAx1bTG/eeJmWHQxAIAMrbCY1mq14ZlVCaLve+OODgCIFnIL3ohc2VbkWc7DLexPNh2UYxdbfFOlYgOXXuILlXbBXlDKpFh8fDEWHFyAp3c/TS+0LYSL+c4dXfxUJYNMKsG6eQPx16P9cHunEMG2qvrZjI8PwzfTu2PJ/b2ctlVktsYn38VMlyIdI1SE4kMukyI+gvsbW3s6nf278fOof/t0mVQiqKFgOJ7k7Et0q1CsM2FDAjfk8Wmeu/SHWy5j0ncHAZA0Hl+E+HoQgcH8rFc+0rfSyNS3M4Ti2bG7ktK8oUKlAphQcqcwLm/aJpDkxh+0PzVm60hXQZA79/RpKSpiX09LPYLvp3dnO4TE8Hf3g5uVFATmlBWiuNyE9zZdxJZzmXhpzVmX7xsfT7wc5F7nodBw0Q+psgD/nMnAdw7GSRarDeXmcrx9+G12XWj0YfgHkv0GxPrjSOYRLL+0HABQYiypsAuJ0nxILE50Wuet9BbZkyCRSHB3j3Dc0SUUg2IDcPCV26rlQnxn1zAM5YXpGRzN2hi0ehNmLTmKVcdSAABFOk6ozPjlCP4+QdKoxeX21I9IN8fvD/bB7Z2cjb1iKhhmWZfER2qc1h1PunX/fuatPMmKRZlUgmdGxuHPR/qx2zPsD1PtHAReoIPIiKzCKIwBbQIclmnktyVBa1R4mC1WfLjlMrpGanBX11AcuE6KubpFcoWkS+f0xcWMEna2SJaO5FFD3LmnT0txEfvauyQfXaWFAMIq/GxPhRcKAeTpirD8SDKWHLiJJQcqNo8K8nbD48MisDz7FcF6m9kbJXozFm8VFgLfyC1Fql5ob16Mi0DARbzU82/M7h+LNw+/JNieWJwIfzX9o2/OWG1W3Cx2/l2qzGBQIZM6PalWB7nM+TnIlVD541AS9l/Lw/5rebitQxCuZnNeKQev5+Pg9Xx4qOTYeYlEMDVqZ6Hi66HEZ9O6odNb2wTru0S4jmbWJcPbBbE+KnOHtsaPexPZcRu3GharTdCBFeylgkwqQTcRMdfeoe7trvgw7LlCLB+kElT4kMdnzeP9cfRmAeYOadNkPZ4oNYNGVHisOZWGXw7cxNN/nsbGMxnYfy0PcqkEIztw0ZJwjZoVKcWGYpzJOQNA2GZsLREWxBb8/nuln+2rIoV7ObosXM3Wiu4TH+HDFvgxBmz39He+CEut4k/K+67mYtF/60S3Deioh1JuxcF0Eo71dyPiZNGxRTBb6RyT5kxeeZ6oKCkxlsBibdhheq6ECt9bw5XfyrwVXJ2Wjwt/DA+VXJCCkUkl6BndMO30g9sG4NWx7fHVfd0Rai+ez9FWLAZbKh/8e0mwzIgNtVKGxxy8ZwY4jLoY10XYraMQEbxi9Iz2w7xhsVSktEBatFCx2qx4ed/L+OrUV3j/yPtYdnFZhfsfTeTCtEzI8qnb2rLdMo6cyDqBUlMpYrxj0DO4J7veUkRqQNTx8QAAY2pKpeca4UFSP9n6ZFzIEO/82fDkIHw2LR739o7EX/a2YaZGho9K5gbAAkiEef73N19Epkl8+OGpnFO4XHAZOrMOvipf3Nn6TgDAtcJr6L6su+gTOaV5kFGaIbrearOi0FC/NRRBDm62qS6EiorXYfb9f5X7rXSN0Ljcxm8LXj23v8CssD6RSCSYO7QNxseHIYgnVNKLyvH1rms4mXxrpIF0RjNWHE0WrAvleaS8dHs7rHl8ALzd5Ogc7o0eURrBvvx6lV4xVe+8orRcWrRQuVxwGf/e/Bc/n/sZf135C4uPL3ZZHGqz2XDoRr5gXZCXCo8Ncz0vhqlPaevbFlIJ96202CMqypgYAIC1yLU3CkNrH/I55dZCXM9zFh8MEb7u+HByV7QN9sKXp77EnO1znPbRW0rh0eYzeMa9C5nHVQxrR2oFJPIiSBUlsFll0GdOFLzndM5p3CgiN4g4vzi08mkl2P7FyS8q/RooTRNGqASonYc0pmpTndbVJY8OaQ1/DyVm9CV+Qcn54kKFP++l1GBGsLcKbgrxy9Mvs3tVWNjLrylrqGiKI4xAy9Hq8eb68/h0x1U88NvxW8JbJa2wHHqTsLuLP7RSao9y7XtpOFbP7S9a+/TVfd3RJ8YPn02Lr/fzpTR9WrRQKTM5TyTWmcUvlDdyS9lhgwzLH+4Lldx1SxxjnR+oFhYNWoqJMFFERQqWKyJS4w+rmbToebZdCEiFIeNfZgs7KHQmHX459wu7PCZmDH4c+SMAQOaWCakyHxKpGXLPi7ijSyjGdQmBVEHOI8onDC+PHCg43omsEziRTaYvx2pinYzokkuET0iU5kNmGfHgaefLmbH5qEjKMKWk8mhfbXh4cGuceGMkZvUnXXFiA+b0JotTPdbojiH47YE+CPZWQckL/bcO8MDIjhVPwl1wZ0fc2zsS658YWOF+9QkzZyqzSI+DN0itm1ZvxkUX0dKWBDMLTSHjBEhnkfELGnelyzk84+PDsPqxhouGUZo2LVqo5OvzndY5drFYrTZ88O8lfLObdL54u8nh76HE2M4hiPCT4ZHtj2DJuSWix2fSLoHu4kJFGUUuzpaSEtisFftHBHmrYDOTjiKJ1AKl5gi77Zvp3TGyYzA+Pv4xuvzRBa/tfw355cKvrVtQN6gVJLxqBZfvV/odQc9Wbnh7fCdM6kOOH+wejAGtOCES4RmBUlMpNt7YCIC0WvcK7oXnez6PKC+yX1ppGm1VbqbklZMbJT9K1jmAuHmmaOtXqAAkJRJsv3EXlBkxf9VprDvN1aGsP53u9J5eMb7o38YfR14dgZ95bc7tQys3HPT3VOHDyV1FCzcbCmZYodlqE0QXHIfmtURytESM9o7xw8RuYZjVLxp3da24mYBCqYgW3fXjeDMHiFCJ9CKRDp1Jh/FrpyE1MxiGrEkAiPvhDzN74lTOCfRd2RcAcCTzCGZ3nA2FTFjAl6sjERV+azIAWPLIjUHZ2n5jsFphLS2FzNt1O6jjpN+wsJtIKhgKAPBRK6A1arH04lIAwD+J/7A3Gobp7afjSqG43f/vl7/GuwPfRadIYGsOEOwRjPZ+7XFn6zsR7hmO/mH98cDWB9j9fVW+kEgkeKDzA5jRYQZ6Lu8Jg8WAfH2+aPqA0rRhpnsHuQfh2Z7PotxcDgkkOJh+EEUiBoP1gcZdAaVcCqPZivUJGVifkIG7u5MC9NMp3DnMHdoa5UYLxnQmXXQSiQRD2gZg3rA2OJVSiNfGdWiQ860tbgoZvNzkTjO3inWuh3+2FJgC4hBvN3x2T7fGPRlKi6BFChWL1YLPT36OlZdXOm3blrQN8YEk77k7dTey9clQ+ibDkHU3AAmCvd2QVpriVPvx6/lfMTd+LgqWLkXRmrWI/PknpJeSJ0F+a7LNaORSP2FhkKjVsJWXw1JSUqFQCfZWARLuySvfchkSWSlsFk94uSmcilk3JW4SLEskErjLxcOkB9IPAOBaqYPdgyGVSLFo8CL2+6WSqdjOEL6/hkKmQJB7ELJ12cgszaRCpYlToC/A7xd+x8TYiWzdU6GeFMz6uvliYuxEAMAfF/4A4DoVWtdIJBKEeLsJun60ehPclXJssY+HmNUvGq+OdRYiFQ08bMoEe7tBqy8VrHO0k2+JMKmfQG9qukapG1pk6ud/V/+HPy7+AZPV+aKw7OIyWKwWXMq/hAUHFnAbpMQxM8TbDefyzjm975uEb3Ag/QCyP1gEw5UrSH3mGRTmkkJEfkjdXGBPLSkUkPn4sOLEUklBra+7EhKJMD0kkZN8tlohczLsEjtHMadRAPBSknB5dhkp/g12F+b4ZVIZYrxj2GWmfoEh3DMcAJBe5hyipzQtvjr1FX47/xum/TONXcekO/3cuA4KdwURtWJ1XPWF47yrxNwyPPj7cbY1+YXbXQ80bI44djwBt4ZQYdyHQ13MN6NQqkuLEyp6s150Kiyf60XXMX3zdJhtXFhWqigCALQO9ESJUbzg7Yntj7GvDacTsPA3E7wUXoIogzmXpH3k/v6QSKWQ+ZCbPt8ETgypVAJvlVBoPDQkCI8NjUZcsCcrVIZHDnd670+jfgIAeCq5mUFf3/Y1tkwiw71StakwWUxsl1Kwh3MxIvP0DTg7ljKGb7uTd+NKwRUcSj9E61WaKJcLLgPgzNxKjaW4VEA8LXxVXAcME33TmRomogIAAV5C2/vEvFLsu0rSp0q5FD4iJm7NmVtVqDAzlsJpISyljmhxQiVVm8oKDR+VD9r6tsXR6UdxbMYxdlLxyssrBSIFACQK8p5Cyzb8uo2kRO5pdw92TNkB2GwYcNGK4WeFN+eQItLKy2+vM+eRC6/cn9zcGaFirULnz49jPxJEM/5KewM7tM9Ab9HjZhFJ/QwIGyB4zyt9XkH/MDKQTS1X49Ohn+LjIR9jWOQwhHuGw1flC5PVhLXX1rIRFX6qioFvWOetEgoVRrhsSdqCKf9Mwdydc3H7mtsb9GmcUjX4P8diQzHWXFvDLvu6cULFQ0EKqxvyZ+jvMHPnBG8OzpZnBjfYeTQUQbyIgod9TtgtJVQ04hFeCqW6tDihcj6PjPuO843D1klbsXLcSrgr3KGWqzE0khSnrr221ul9UnkRWge6w/jOYnzzgwXt0mwI8wxDiEcIOqbYMH+DFXO3OHfu3Bt3j2DZlE48K+ShRAzINPaISknlbYldA7ti/z370Te0L7supzwHySXJbETF0d/kvvb3CZZHx4zGmFZkyrNEIkH3oO4AgPePvo+cctKlJBZR4UeFmFSRq2WAtLz+ePbHSr8mSuPx5sE3kVWWxS6HenCOn6xQMTecUHGcz7PiKOk4ivRTo02gp9hbmjX8iEqkH4kulJS3bJfnMoMZBfaBkuG+VKhQ6oYWJVSKDcV489CbAMiN11PpCTc591TDdPvwsZSTdRJFMd7W7UH/yyRqMvScFZ39SWdNcJHrz4zZck6QBjEmE78RZTRpTZZWsUaFQSKRwEshFAbZZdls4S6/lgSAwGhOjIe7PCxYVkqVgloFhi4BXVweU0yoAMCl/Eui6yn1g9lqxrakbWy7sRh8F9rdqbvZtM+zPZ+FTMp5AjVGjYora/OJ3cIb7BwakkCeUGGmrbf0iMoZe/t1sLeqxaXyKI1HixIqhzMPs6/FrOUdUx7GggEwazsBAFQBe6A8tp/dNtJUht6B3QAAY+PGs+svO1xTbV//hpJNm7ljpgiFisxHA6Bqpm8M/FoTgNQdWGwWyCVyJ8+WyugS2AXT4rjCynZ+7UTFTZfALnh/4PtYMtrZM4Zfs8IXNDbQOpWGZNnFZXhh7wt47r/nRLcfyjjkVGR9Mf8iAECj0gjWe8hJRKXcVF73J+oCqYvpy8PaBYmub+7whUpsEBH7JVUUKsuPJGPSdweR3cyGGh67SQq3+7Wmg0wpdUeLEiqns7k5Nr2Cezltb60R2uFbDUGwmriakPJcLkzuowMkORcAAP18urLrP7/b2ak248UXYUgkqRlTKjGyUkYRozSumLYaQkUhFCoJuQkAiLGcVCLFpLbE82VoxNAqHY8vbjr6d3S534TYCegT2sdpPT+iwk9LZZZmVunzKXUDM6vqdI5wXpPNZkNKSQrm7pjr9J5yMxEijp1c/NRPQxVGdwwVb88P07TM7pDWAdzf8X19SORWazBXaqNvs9nwxvrzOJVS5DTcr6mTkFoEoPFGF1BaJi1HqJj0rMtmuGc4nunxjNMurXxa4bbI29hlq8kXNos9j2qzwZdneWDWS4GfhsGSnwHdKXJj+K+LBIVeEvwxwvnbVrT6b5hycmBMJS3L8mBSB1IjoeIQUWF8UBhjuZd7v4wPBn2AhYMWVul4/FQPv7unqvBTBvd3vB9T46YCIK6m/BoISv3i6KrM8MSuJ3DHujsE6+J84wTLPkpxoWK1WVkx44pzuedwvfB6dU/XiREdgvDexM6CcRASCRDo2TL9NkJ83LB23gDsfXEYwniFpZVFVQ5e54wqjyTmN5kOu0VbLuHtjRdcbrfZbDifTq5zYpb5FEpNaTFCJTHrNHtDf6v/W043e4bxbbg0js3sA4suFgDgbgBUvDq3skw3mPVSZD7/JEr++QcAUG7vrtzcR4p7XpbhWDeu/a7g999xfchQwEQuQoogIiqYYtqqdP0wOIbpGRj/E3eFO+5qc5fTU7Ir+N0eIR7OHT+VIZdwvoAaNw3e7P8mOvmTlNnqK6sbzN30ViajNAMWGze4j2k/NlvN2J++32n/gWHCOTeOv1NquZoVsDeLb8JitWBb0jYczTwq2K9AX4Dp/07H3RvvrvUNUyKRYFa/aAxqyxVueyrlkMtazGXIiR5Rvoj294BCJoV7BZ0/V7O1yNHq8eras5i5hPsZZJcYXE5Tzywux8APd+PLndfq5+R56Ixm/Lg3Eb8fSkJmsbiwzdEakFdqhEwqcRk9o1BqQou5QnyQ8CX7OszT9VwJvg2+1aQBbHL0UTyJdmnOF+GSFDW0R7jQ67B247B98nacu/8cfh+3FCMmPC36GVIPD0g9yBMra/hWDaHi+DTMwBivVRe+f0ZNhMrQyKEYFT0Kr/R5hV3HfI9/Pvcznt7zNIwWI3488yOOZx2v0TlSxDFZTPjjwh+4fc3tgvVfnfoKNptNtLD259E/Y2yrsYJ1QR7COhCJRML+ni08uhC/XfgNL+x9AfN2zoPRwtm88yNmrvyFqotKzl12PN1apDm2KExxqePw0+T8Moz+fB/6LNyFP4+RiGzrAA/0iNIAAC5naUWPt/lsJtKLyvH5zqu4kVuK19adw+EbzmND6oIiHSeuygwW0X3OpZFrXGygJ9wUroe5UijVpUkIlby8PEyZMgUeHh4IDg7GggULqv30dok3XC3k2n/s68IyI/45kwG9ifxx8W/asLphzeP98XLCRbz6N2k9Tg0AlP7kQp19ShixiApph1BP0uLZI7gHwqfOgCpOXFQwSGuQ+ungx9mIM0MBAecam6rCrzGpiVBRSBX4bNhnmNFhBruO/4R+Ouc05u2ch28SvsFz/z0Hs7Vlt2A2FJcLLqPH8h745MQnTtuWXlyKI5lHnFJvIR4hiA+MRwf/Dvhq+Fd4qPNDWDlupZOJHwA2KnYu7xxbdGu0GgUzspjIDSA+5LMm8H2HPFW3jlDRGck16N6fjgjWn0opdNo3NsgTre0t2/yC2hytHgYzOY7BzNkljPh0L1YeTcHsX4URsbqCL1Tu+voAzthrUficzyDXuE7hNJpCqVuahFC5//77cenSJfzzzz/4448/8PPPP+PLL7+s/I08gmUkgnGXtgyqf54GTOSPe+7yk3jqz9P4bg/JsXf0jMV3y3zw8OpWkEqADkGesGzczh6n0FMCz9H3OH8AADiIJ4lcjlZr/gfvccKnV/e+XMFpTbt+ZnWchSERQzAkYgi7vib1JYAwEiMQarXAMZVwNItcIIsMRTiccVjkHZTq8sOZHwTLwyOHQybhnlSPZx3HhXyuZmD75O34d9K/7CiF4VHD8WzPZ9ElsAvEmNOFm2eVVJLEvr5ZfBObEzdDZ9Kh2MD93ooN+awtt1JEhZ/ySSvUIb/UgLxSAywig9WVcimZ/wUiVKxWG15bdw59Fu7Co0tPAgBytQan95ks9VPPUlTORdnKTRbM+MVZEKUXkpRQ6wCPejkHyq1Lo18lbty4gX///RenT59Gt27dAACLFi3C+++/j/nz51f5ONnmUkApxZNFRQCA8oPbIA3vyLbLrT6RhmdHtsWNYcMRUFyM0cjHjtGekKYmCY7j6ymHPFxcEFgKnC/UEoUC4Z99hrBPP4UpJQXl58/Dazhnc8/UqNgMBlj1ekjdqtbh8FLvlwAAe1P3Yvml5Qj1CHWZEqoMT6UndkzZAYVUIXiarQ0V1cdsvLERgyNantNoQ6OUcZbzU+Km4K3+b2H1ldV478h7AIg4ZITE5LaT2WhfVfFSekGj0qDIUISUEi4iOXcn6R66p9096BrIdbzVi1C5hSIqPaI0OGWfFD3ooz0AAIVMgjGdnX9uVpsNwXZn23Wn07HqWCqMdkWz92ourueUIrfUWajUF8U6YV1NqcE5alpkF2K+HkqnbRRKbWj0iMqRI0cQExPDihQAGDt2LBITE5GdnV3l41gkNkhtQJDZAqNWhqTHXsHNafdAbk9DqJUy6I6fEEQ2XuofCrPDZ3TzDYDMl+uSkast8O+ghVStgsbrJHDwK6fICkDC2croaPjccQek7lyRLVOrAgCl+/ZVO6U1NHIo9t+zH5vu3iQwr6suIR4h7MyeusBqc34MZNqlmXkzlNrhJuN+3oyr7NS4qXi97+sAgLO5Z5FcQnx7HI39qgrT/cNP8TCsv74eJQauLqUio7maMrjtrTON++vpPSB3ML0zWWzYcdG5c04ulSLIi/z8tXozK1IYdl/OxuazzvYAEglgraT9uSb8evBmpfswYkajpkKFUrc0ulBJT09HTEyMYF1ISAjc3NyQam/15WMwGFBSUiL4xxBmkkIOoDiJCAVbeTniCskxbuaV4fpF4QTiEEMxzDm5gnXygEDI/Lj0iNLTjKB4LeLuuglV3g5gxwLg0j9V/vr4EYz0p59B3rffVfm9DBo3jeDpuinA70BhYAYm1lXRZVOl1FiKhJyEem0b1Zv1WHd9HbvMeOdIJBLc2/5egUNxlFeUYMZPdWCEihjeSm8UGzlhzzdUrC3b5g/BG3d0wIMDW1W+cwshXKPGp9PindbrTUIR4uUmxzMj21Yo4r7exbWL9+J5lthsQIm+bt1vjWYrjic519HwKdaZcCyJRK8dRyVQKLWl0YWKwWCARqNxWq9Wq1Fe7twGt2jRIvj4+LD/IiOJkZLSZEMXA7ED1xdx4eTFB75H57wbAIDV6w8JjqXRFsCcxz0lKr1N8OzbBfIgrkNC4UFuyAIz1yPfV+trlCg5kZH3zTew6puX26QYE9pMYCfwMjBmcSWGkibj/VAffHHqC8zaMgu/X/i93j5jxaUV7OtPhn4imMUECI33mKLYmuBoLujIn5f/ZF8fTD8oqFmpDe1CvPDw4NZQtODWZDH6tHIeX8HQO8YX258dgoQ3R6NNoCc8VHI8MlhcyGntqZdJPcLx5X3dERfM/RyZWTt1hSvb/8Vbucgpv6WaChVKXdPoVwm1Wg2j0fkPq7y8HGq181CrV199FcXFxew/JuqiKQXamkj42lTKCRWZzYo3j/4O2GwILxOGrvXr1qDk338BAP693dFmXC6UbTtD1bYtu4/o/Tb1CKATN98So9XaNYLl8rNnq/zepkqgeyD+u+c/bJu8DW4yN4yKHgV/N5JaMtvMlZqIVQlL05yL8teVvwAAn538rN4+43g21+btON8JIDUrIR4hGBE1AvN7zq/x5/AjKtPipmHnlJ3scm55rkCYWGwWTN44uV5qVW4VQn1cD+qbNywWccFegplI7UIq7qB5cEArhGvU2P7sUETZBx8W6hpGqHz33w2kF5VjwrcHcS6d+z3RuDet6C+l+dPoQiUqKgpJSUmCdTk5OdDr9YiIcA5nq1QqeHt7C/4BgG8pEGyxwGYDDMVCRe9lKoeXSYfwUpLmWduGdNKU7d8Pw5UrAAC51T4bKDQeUl4EROkl0mprswIX11f5a1Q6pLaMiYniOzYz1HI1wjzD8N89/+GToZ9ALVdDISXf+xo/eZsNQOZZ4IMI4L0AUhPUhKmPyJHVZmWngN/f8X6082vntE97v/bYMWUHvhj+RYW+QZXBj6iMiBqBYI9gPB7/uNN+TCF3ti4bHxz9oMafRwGeHtHWad3n98RjaJzzHK9J3cPx8pj2WPN4f6dtsUGe6MxrBWaKWAvKqi7wi3RGfLztMm7klrrchxEqkX5qLLhTOIJj6aEkp1ZlDR1GSKljGl2oDBgwAFeuXBGIlW3btiE6OhohIVX3/AgusiElqSNOF021r7EhtC+XV+2fcR5xRWQOz7boPjAohLbd3pGlgMoH8I0BAESvXAnf2zrAr53DdNlRpOMCp5ZV+dwkcmFng6GFCBUGD4UHpBIpJBIJ2w207vo6pGnTqncgXQHwbR/gx8GA0W5ytWNBHZ9t7bBYhbU5OrOuzj/jWuE1FBuKoZar8UxP51EQdQkzRRkAW+ciNkNqRNQI9jVtP68d80e0xb9PD8ZLY9rho8ldsOmpQbi7ewSkItOlpVIJHh/WBj2j/TC7f7RgW8dQb0ENnJ895VJYjdTPe5su4ds9NzDl+0Mu92Es/33UCswZ1ApJH96BkR2IS/YvB4RFtv1b+7MOvBRKXdHoQiUiIgJ33303Zs+ejZMnT2LXrl145ZVX8MQTT1TrOHO2WzFiZzrU2w4CANyDjNC0KoebH/mjfTbhb3bfTI8ASHhtwm1/fQ1yNysQ1J6UzQNw79EdIe99DJnCBniFAkGdgEHPAR3uJG/KvgBYqm5s1mrtGrj3ITUcxuTkan1tzQlmpsz3Z77H2LVjK9nbgUv/AIVJdX9SdYij6VlBedVTgFXlTO4ZAEB8YDwboaov+AMrmc4iR3O4Dn4d0DmgM7vs2OJeoC/A1qStMDXRVF1TQyqVoGOYN+YNi8U9vaOqPBfn3Qmdcfm9MeyyoyBgIyrVSP0cvE7S4YU61z+7Yp5QYegYSkwk+QMWdz43BCsf6VtnFggUCkOTMDH4+eef8cQTT2DYsGFQKpWYM2cOnn/++VodM7gHST0o3C3gz3LLUWtgkskRNG0KipYsQdBjMyDPJwZK8I8VHsS/DfDcJUDtByjswsZqBRQegKkMOPYT0H9elc7HrWNH+D34AHTHjsGSV40cf1keYDEC3jUP7zckjt1JWqNW4IxbIbqmX/uQUZohWM7X5yPSO7JOP+NGESn+bm+TA9pswCu4To/PZ2aHmdCoNBgcPpgdL6Fx0wj2+eq2r1Bm4iKLjh1fT+9+Gmdyz+CZHs/UuE2aUjX41vTuSuHl259N/YgLlc1nM3HsZj5sAKb1ikTncB/IZZWLCjGh0jZY+Df96dR4xAZV8e+cQqkmjR5RAQCNRoMVK1ZAq9UiPz8fixcvhlRa81OTyGxQeZNoh08rYWj+8+H34KnbYhHy/HOI3bAU/kUfAyd/Ixv9RIzevMM4kQIAUingYe/AYN5XReT+9mLTgio+hVstJBXyTR+gvKhan9VYvDfwPcHy0otLq16vUi7SAqnwgM1mw6X8SzBZG/eJ3Waz4fOTnwvW5evzYbFasPj4Ymy5uYVdn6pNFdzcq4rVZsX5fFKf0ubcBuC3akalqomPygczOsxAlDc3qsFRWPqr/dFG0wbzuhFRXmYqE/xMmQjQhusb6vVcKYSZ/aLgpZJjjkNHkK+DULHZbNh8NhM5Wj1sNhueWHkKfxxOxtLDyZj0/SEYzBakFXJF7/kuDOSY4ly+UIlzECp+nrSAllJ/NAmhUtfI3bl2YmWYFZBw4cn13m8h3qsEEqkUCouDYVJg+6p9wKh3yf8G8WFhrpD5EaFiKSioWhFm5hkSZTBqgezz1fqsxqKVj/Di+cOZHzDz35lVe7PYFGazHruSd2Lapml4aOtDjSpWDmYcxKmcU4J1W29uxecnP8eyi8vw0r6XYLPZkFSchHFrx2H65unV/oxPTnyCs7lnIbEB3fQGoOBGXZ1+jWHST4/HP44gd9K6zxjN8Wt25NImEaBt8bw/sQtOvTkK4RphB5GfOydU9CYL3tp4AU+sPIVHl55EvkOUxWi2YmOCMDr47qaLOJqYD51RmNK+Yh+KGO3PdYjFBAitCfxopw+lHmmRQkWh5v4o9ygGIaRnMaQKKyKHktTCMIu9cMzRXTWsW9U+IKw7+V9X4KJ/WRy53UjOZjDAWlaFIszEPdzrohThNputWp/dUIgZ0/HnyAAA8m8An8QB+z4WrheLGtks2JuyCwCQkJuAF/e+2CgeLcWGYszfM59dDlST2o6tSVvxx8U/2PUPbnsQW5JIZCWxONGp+LYyNt3YBAB4w+yOGHPjDXcMdifpJkfhGe1NCjoZoZJRxt3s6DDKhkPMfybAkzQI5GoNuO/nI1h6mPyMElKL8M4/F532v5otfNDakJCBe346gm92c2ZypQYz29XTLVLDrlfJZfDizWnyo7b5lHqkxQgVVReu2C9FTS6mTxmfRKp7R/jG6hA3KQueoSS0KS+1W1Y7FkJ6h6NKuNtNmywGwFT1rg+puzskdnt9sblBTtzgCZUCXqdQ+kngHQ3wTW8g5SiwfApp6W0iVGYihn2fAKXZwO73SXqLgYmotL0dGPQsIFNir9oN629uZnfZlbILS84vqfuTroSjmUdZm/kHOz2IN/u/KbrfyeyT+C6Bcx/m38gro1BfiEIDSX/dqeeJ6LWPNrinzLcjvsWo6FH4fqTQ3JAZjPnagdeQVZYl8FRJL02vtjCj1B3MbKBz6cU4bZ8pxPDPGeffQ2aa813xYQjx5tLb3/1Honhbz2ei81vbkFFMDCo7hQmLrFVyrl7Gn6Z+KPVIixEq0Uu4m9d5czC663/AP9YBKPEmHhSCQnStPeXDN227d6XDThWg9ASYboxqGL8BgNzuwmtxqFOxGhzywxYTkHqMWz6/FjjyA/DrWODn28i6/GvAr6OB6zuALS9V6zzqk3UT1uGFXi8I1gmetrW8lFvmGe41E1Hp8wgw8m3AMxhvBzjPJ2I8RhqSk9mk4PredvfiuV7PCZxhK+JmceUzUhiWX1oOgHTfuPMLi8/+Bfw4FFg2iZ0KXt+082uHz4Z9Jpi8DQhdcN848AYK9VxdkclqQo4up0HOj+JMsI/QciHMx3k2WF+eMy7jndItUoOlc/qw62P8ycPUY8u5NGeApxJebsIONC3Pqt+xsJdCqUtajFCRyGSI+OUXXPKLxqp2I1EIov5vQGQGSomDUBn4DND+jmp8mISLqlSzPVXqQ1oRLVrOYEl34gSu9OqNvJ9+5nbMvUIiNgDxdym4AWx9GUhx4XdgdG3Y1NCEeIRgatxUwTp2/o++GEjh+XDwI0WMULF3nZj92yKP99T2bMTtAEgnUUNzpZAYAzLThNVyNZaMXsJGGFyRWFQ1zxyrzYr/Xf0fACBW6evcAZVzAbixC7i+U+TdDUd8EDer5mjWUWTphAP1UrQpjm+hNBD+HirwrVj+eKgP5gziUncPDIjBsjl9EeRFBM2FDPI36euuQFywFzY/PQgAkF9qxIL1wocBxvWWj8HsPJiUQqkPWoxQAQCvQQPx2YSXkOzNjU3v1Z5/I7H/FWvtYVBGZKhdz99wCfOearbUyjxJWsSq5Qb35XzyKWAyIfczniV7lj2VEz0IGFqFaInctTV3Y8A3EgOAIl0usGcRSfuYeVGBNXOAlfcAb/sAxfabnAeJohS3G8Xu9mtmNmJPEJO9xhAqTGSEL0z6hPbBhokb8PVtX2Pt+LWY32O+0/sSi6sgVPJv4ErOORTY++gXBg9zvW81Uo31QWuf1lg4aCG7vDdtr2B7qtZ5kGhN2Za0Dc//9zw7ANJms2Hx8cWYsnEK9qbuxYpLK2hdDA+ZVAL+4OSYAA+8eHs7LLizI/a+OAxvj+8EpVyKaHvERKsn3ztfeyEskzrSGsxYdkTo9cQvpGVwU7So2welCdPi4nUh3m5sy91Tt8Viet8ogHkIdfcjwqIolURTmCd4tab6H6SJBHIvkYhAm9sq3tdmAzITgIA4SO2W/+nPPQ+vkSMhUSohUXAhVZvFAolMRs4RIF4uMQOdjzn1d2DzC4DOPr+oNLv6X0MD8ubu+VDmXcdX2blwqmC5ulW47EE6S4rajgQufw9viwW99QYkqMgFtSGFisVqQYo2hRURMT4xTvsMixwGAIjVxMJsNeObhG/YbTuTd+L5Xs+zjr1OJB0Afr8DV2O6AxIybNDXWsGTqjbT9bYGYnyb8dibuhfbk7fjYPpBwba6mAOUq8vF/D3zcTaPiPXtyduhlqsxNGIotiaR35Undz8JAMgqy8LzvWrnudSSCPBUIq+UNBMoZFIoZBBEVQAgxt9DMA2ZGSLo566EUiaF0eL8+zcw1nmS88+ze2HB+vNYeHeXuvwSKBQnWpwk5k/ufGJ4LDFIUtpvje3G2luQbUDSfi5doqyk+FOMYHuufvPzwJLRFdeqXPoH+GkY8NcsyLw4/wHtLtLNIlFzuWRTejp5wRSWqjWAv/NsEHS6G3hkNzBzLVkuzWlyXUBDIoawr8+UpeG42g1Hma81wHl+DYuSPL0V2tNFfvYLp6f9cVFrajihsuT8EoxfPx4AEOEZIRji54hEIsHc+LmQSbh0ldakrbj49zjZlltIChhD3EMAo91/JayH8/4ljS9UAJLe4yO1+wEU6KuXChXjo+MfsSKFodxczooUPvU5wbo58sPMnlDIJC6nLgMk0sKHGZQolUoQH8kJ6ghfNXzdFXhsaBtM6u7caDC4bSD+e3G4qIihUOqSFidU7u0dhRBvN9zXJ4pzcXxkD7G/H/UeEG2PTqQd54SKqgaOiiG8p4jUo8DiVsIOFj5H7J0TN3YJCnatOhLGN+dxU53NjGut3m6o5aYBVJ7AYGFxKgDANxqIsg8rM5eL+5A0Il8O/xIzOswQrEtj5h4NfxXoPosILceWZvv3qMhQBADQeJGLpJc90lBqLG2wFuWvT3/Nvh4VM6qCPTk2TtyIN/u/iUWDFwEA9qXuc72zPXWRKyO/q4HugdzvZfQAUj/FJ8e5zbQx8FcLi5yZlFhdCJWzudXrYMssJeKtzFR2y0927hXjh1MLRuHVsR1c7hOm4R6MhrcLRAiv6HZAG050PDsyDqffHI1XxrYXnUNEoTQULU6ojOwYjCOvjcCiSTwhERgHjHyLpH4Yr5SMBO7JVen6KdklYumey5uc1+mLBQWw1lIuGmDRamEzGmFK5Yb3WYqKyAvHtNSIBUBkP/Kab3GudGdTJU1tTo5cKsf4NuMF69IZodL2dmDCN0DsCCC8JwDguJsKq7y46BbTqqsJbA90m8kKFYvNgkd2PAKL2UiKS4vTgIzTQLLrwWp1wbhW46q0X5R3FKbGTUUbnzYAeIXEYjBCxV40HKgOBAxMpM+DCOxOdwNjPwYkMuDmXpIuqg1nVgE73wa0WZXu6gp/N6FQaaMhX2tdCJXq8uqBV2Gz2XDvpnsxdu3YRjmHpoSXm6JCYRHoyQmTDqEOc51CuYc22nJMaSq0OKFSKUw4Pe0EkHeVvK6JUFH7Am1HC9cxrbYFicAVe5h63eOCXSwl3E3LnJML7Z7/YNXyxEuhPXfMREf4omTyz0C3mcCD/wo/188e5i2oeitsQ9HRv6PAcyRNqQBmrCECi0WCUokED4UGY2GAHy7mk6gB0/rq6+YPDHkBal4U5WjmUZz9OBxYPpn4yfw0jNjNn/mrzs6dbxMfHxiPdr4VpKtE8LSnFEtNLjqyChKBK+RnmSOIqDAC2pMI1am/A30fBXreT9Yf/bFa5yHg+k5g3VzgwOfAoa8r398FAWphuL8uhQoTSQOAtr4iaU8HTmafxK6UXUgqSUK5uRyX8y/X+hxaMgFenAAJ9ha2MMcGcQ8K1MSN0lS49YRKcCciVszcjIsa1agAwPivuVQSQKI0ZXnA9wOBP+8B/n0RuLJZ8BZNNHfzM2dlIu+bbwTbLUV2oSJW6KuJAiZ+y9XHMPjahUph0xMqADA1biq+05GLXl5ALNB2pHCH3nPwnzvXtZRUnASAL1R8ATcfOD4jFtlv7oJOmPWP1Vkdx/bk7QCIO+uyscuqPRXWS0GeTsvN5eLW/6eWsi+L7E6jfpteJBEiwFlAt7O30OfXwlb/Ei/ql3etxodxTP3EaeIAANeLrgu8VaqL3qxHuf1vc2DYQDwR/wQGhosUkzuw4tIK9jVjzEcRJ9CT81vxdRAjUX7c7xwVKpSmwq0nVCQSYNQ7wnU1iagAgFcIiW7MWk+Wb+wi1vDMjfPYT05v8Zbsge9MMvum5N8tMFy7BqmXF3wmTgTAj6gwNSpVGAHvS5x42RucKwqTgcPfkXNMPlzxvnWJ1Qpfe5qh0CJiWNZ5MjL7Pcouvrz/ZRTqC9kna1+VL6AiIWoZL6qSwfNYYbFZgXN/18lp70wm7WITYyfWaHS9B+/36s9LfzrV1WQXJ4ORL6X2YlTPojQg2Z7acayd8o0h/xcm1bxwOvcK97oo2fV+lRDlFSVY7hnckzWHm/HvjBrXEDE/c7lEju9Hfo8R0SPw9fCvMSrauT7IW+mNsa3I0MYT2SfY9cXGKg7BvEXx5c3lkTukiJRyKb6b0QPvTeyMCF9n7xQKpTG49YQKwNZEsNQ0osLgxeuAsLkoqJ1AbNUlciW8RwsvuppJd0MZQ8SGuaiI3IQYfxa1b+Wf70nmskDLa1G2mIEltwO/3wkYdcDlzcCXXYFtr5JW5nWPih+rPijNgsZInpKLTKUoNhTjRhEvKiCRIEchfHo7nHGYq1Fx0wAyUtsSz3PwzZDLxYXcmT9r3QFlsphwOuc0AGBQ+KAaHUMhVUBt97f5+MTH6Lq0K9K0RExeyE7AyNITeCqYzAwqs98wPPnzpxwFtCYSgAQwlVXbvwcA+Z7k8tIihck1/j65K9zR0b8ju+yt8sZzPZ8DQLxUmO9ddTmedZw9PiMOFTIFegQ5d0CVGEucnHMBoMRQQU0QBVKpBP1a+8HXXYFBbZ07dsZ1CcWsftGNcGYUiji3plBxMCOrcUSFgREKrrj3T6DrNEAqByxGyNVCnwL3fv0gDyAXDHNWNlCSTlJTUjngE1n55zNC6eZe4M/pJKSfexlIPULasD8IBVY5TPLVN8BTp8UM7F0MnP0LvvYWY71Fj/Hrx2Pihom4XsgNP8stzxW8VSqRoshep+Orsou1ke/g/VyuBiJHJgMe2s6lvrpMJaMNci7WOg12s+Qmys3l8FJ4IVYTW+PjMOkfho03NgIA/jr5FQDgoLsaplZDoZfaIyp8xy7H30u5ivtZOw6prAppJ4jJITPl2FwO/Di4xmLlrf5vwV3uji4BXSCVSDE6ZjQb+TiXd06wb4mxpErmbG8degsAoHMwtpsSNwVzu87Fn3f8KVgf6hEKR2hEpXKWz+mLg6/cBm8HW3wKpSlyawoVxzC+VCSFUB34Ba+OdJoEtB8HyBSkxgSAXCG8CHsMGABFBBEkpssngbOryQa/NuR9lcHcvIylpCZmxdTK21j1xUB2HbS6Jh0kwxPFbnZXtwB7FgI734a7zQalvcqEKbj87ORneP3A60jISUCuTihUDmUc4tqTme9vtxmINJuxMJdEE0qkUtg0Ubgw9UcYRy8ERr8PhNot3lOP1+rLYlpew73CWY+QmqBw+PmllxKfHGk5V8ehC+U61Nz5Zm+eQq8SAICH/Qm4uhGVI98DS+y1QZ2ncN+nrHM17hbr6N8R2yZvw29jfmPXMVOX+W3C2WXZGLF6BKZvnu4kQBxhankcUz1ucjc82f1JdA7ojMfiHwMA9AvtJxpR4RdBU8SRy6R0Pg+l2XBrCpW6RlrBt9GHdyG1R16kFu5CGrb4I0hVKijDwwAApgIdbDvsNTSBVewycbyhFd4EsqswuG/ry1U7viuyLwK/jwOWTQSu73Lezhs4KAGgkQsjBPvT92PjjY2YtWUWsnVCZ91119exN3W2FdZ+k9ZYSHqtSCbFgmMf4N4dD2OJu4wItojeZN+MmqUeGJipx2JP7NXBsTX5UsElAICEJ1QKfYmAdbNawcoamQrwF4nkuNuFyoopVRuIaSglpnJbX+HWdbuPiDqGqvyuuEDjpoFKxhVnBrqTVFZeOecNdDrnNPQWPS4VXMK66+tcHosvYhb0X+Byv3nx8/DZsM/w/sD3EeYZ5rSdChUKpWVBhUpd0WqI+HreRRwe5CKO0lwEvfgivMaMgfdYUgwoV2gBqQ02qwTmcvuPpeOEqn22Z7Bz+umm3WSs98PAqHeBV0RmsNS2O4Zp7wZIIbHTdntXiVco0H0WInzbuDwUI1TEahGC3O0+MRIJMP4beNujDkVSGTbc2AAA2JO6h+xjLzg9cnUd7lx7Bw6lC71V9GaRYl4RMsvI90ZwIzQbSPqkGqmS+zuSlmLmyf9a4TUcSt0HK2/kQWoAMUvz4Kd9gjuydTkC+DVLez+q/AR2vg1sfk64LmYI+X3tZjfjy75Q+XGqCNO2nFuei61JWzHr31k4kM75vuxO2e3yvVllpODaS+EFL6VrE0aJRIJR0aMQ7BEsKiTpBGcKpWVx6wqVIfZBf/esqHi/qnLvSvJP7gb0fYxbz3ew9bTfcEuz4T/nIUR88TkkpRnA9jcg+fd5yJV2QzOjFAjuAnScWLXPlsmBR/8DBj3LrWMiCn3mEndTN28gZrDwfSXptSs6LeXdEG7ud97OPKmP/waY8A1md3qw0kP2C+snWNaoNFDynWt7zIKPkhTQZii4G3m2LhtT/5mKg5YS2AA8olEiWZuCzw6/y7a7/nLuF/Rd2Rf/Jjr40IjApH7YG6HNBvwxHvhlhLixHwAUpwM/3wbs5ob2Pdr1Ufw48kf81p+LYMzd/QTWqrlzT9GT76OnnOdpEdxZ/DP4qZOUI4DYXCCbjXR1GXXA+f8Jtz20nYsAauwFk3U4P4gRKnnleXhx74tIyE1gxSQAXC5w7XGSVJIEAAgRS3m5wI33PWPMBdNK02CxWkTblK8VXsOp7FNVPj6FQml8bl2hMvRl4PmrQIc76+Z4Ki+g/R3Aq+nA7YuAB7cSy35+VIRxkN3/CXB1O6mj+HEwMd5KOQQpX6jE3yP+RO0K7zBg5NvElp5BKhemDyZ+Dwx/HXjpJiCRkpteWa7ToSrl8LfApx2AwzwPmOxzQn8PXQGQby+WDSdRkhHRI7DqjlVsjYEjfm5+mNN5jsD1lI2m8PBpe7vTugJ9AS4XXMZj15chjde2fKUsHX1W9MHE9RPx5akvYbVZ8deVyk3hmNQPG1HJu0aKkwHXzrBrHwHSTwL7FgOlucCVrZAAGBA+AKH7v8B4rbjxGyOcPPjeJHyBy4dfBJ2ZQH6XHNn+BvDbGLKN3xUV0RuI6sstM9EZXhqqtjBCxZWVfYmxxGVqhhlw2D2we7U+87sR3+HZns/i2Z5EqOfocjBxw0T0Wt4L666tYwXLvrR9mLRxEu7fej+yy5r2EE8KhcJx6woVmRzwqqRbp6bHlUqB6P7AwKeFhbvevDD1yqmkuJF345EqSHTDKvUBut5bs8/nW/u7+wvrZzSRwNCXyCgBL/sNuCbdI9teA7QZzj4cqUedX/u1Jp9np1NAJ0R6cZ1MfFt6X5UvlDIlPhj0AbtOTKh4j3rfaR2fBJXKad2NYk5EpZVW4jcDLqIS5mH/PpXw3uPqxl7ES6/9MIiY/l3ZQpazL2BhXgHaGI1Ob2MG8Hl68L7WiF7in9FurHB5z0Lhsq6AE5CHvxUWens4fC8ZoVKVWpcqwggVprVcDFff/1M5JNJRFYM3PoMjBuOhzg/B380f7nLS0cdEZ9489CY+PfEpivRFeGLXE+x7EosTq/UZFAql8bh1hUpj0Hmy61oWADKFPaIy5B3AM7Bmn9FqKO+AFThL2juQqt3xUVGqiH+jZtIjbUY47TYofBCGRQzDk92exPO9nofE3g0U5U3OibFjB4C2GmcLdbnaFx38XA9dey2o4mmuOboclBrFoxsAYLQY2XbpUE+7uOR71Lgy1uP7d5Ta5+hcXE9qW+zf52gT16L7kY+wHsfHIxh48iRw3ypnrx+Gvo8DdztY6PN/JnyzO7OeRF0YmFELDO5MRKVI/LNqgEalcbmta2BXAEBqiXO9lNVmZT1matoOLpFIMDpmtNP6XSm7MHT1UME6ph6GQqE0fahQaUiUHsCsDc7r4+8DAEhDiQ251SBSd1BVPHjpA2ZmjBh+pIAT5/7neh8xtr/hvK7TJPJ/MS86w3T8iAxv9HPzw9cjvsbc+LkIcg/Cnml78GKvF/FCLzIhmh9F6RUiHllYOnYphkUMq96586jI5p0ppHWTuXEeLqW8G1uRSGGyoVR8enXaCZI2shu5PV1YBDerFRO1pejgLRQOGpUGCIh1jprwkSuB+HuBYa9y60pImgo2G3BR5PcLAOLGCt8DVJz6qWHtklgrd6A6EOPbjGdF59XCq0775OpyobfoIZPIOHFYA26LdP59y9HlwGoT/k1VJapGoVCaBlSoNDRSKfFH4dPjfuDFG5C1Ia21Ft6E5VpRkVDp9RD5/9o2wOycjnA6TtJBYOurwroUAHg1DYiz14zw00gG+9fgLpwJI4a/2h+zO81mIyoSiQTfj/wer/R5BYPDB4u+x03uhk+HfYoHOj3g8rhBFtc32wKD63RHRqm9NdkzlLPOv7aT26EkHbA6OBCL1YoAQMEN4ALXktvGZMaelHS8lVcAjUMqpqJohBPDXuG8UG7YO2kubgCSD4rvP+hZQOXgwKy2p+TKHb4XVgvw83DgbR/g0/ZAylHUlGERw7Bz6k4sHLQQ7f3aAwCWnF+C9w6/J2hHTtUS8RfqEQqFtOYmZEx7NAC80ucVeCrEXaeZnzGFQmn6UKHSGExfDYR2I4Kl40RSj+ARAKkXmWdj1ZbCXFiIzHfegeH69QoPVSEVDWcL7wEoPMiTvlidCvNEbSwj03Z/Hwcc+U64z9iPSRFxAIkEIe0EV+9gsKdWHOfVVJFB4YMwo8OMCmfsKGVK3N/pfnbZ0SSslcR16qvA8ebMg21NVgeRacw3dnPzdwAyJsGxU6aim/npZYJFT5sNcgDeYb3YtBcA+KiqMNeJT3t7IfjVreTn9ff9rvcVGzXARFRMOtIhxFCcynWNaTOBNXOqdVpMFGpq3FR8ddtXbJQlPpAIK6vNitVXV+O3C79hxaUVOJd7jk21hXhUveNHDP5UZ1+VL3qH9BZsf7v/2wA4J+QyUxme3fMsRqwegVWXV2HOtjmYt3MeLI5ClEKhNBpUqDQGAbHA3L3A06eAaX+w7rNSL/L0Z0xOxrX+A1D05yokzZhZ/eMPnE/+H/m2630kEq5mwdFu3lAKfNOLONx+EAZc+kf8GD0fIP+HdQcC25MbHuPfwkRUHJ/i6ximeBIA+ob0FWy7W0luejKnucvA03uextncs07rU0pSWBv30IJkMhNp2d32rRJAYu8o+ucZ4RvL7K3aPWZz65h6IcYzhR9dmvo7ZJF9BH4h1YqoAFz9T9J+Mt+IT5epwmUPkZonNx9uPd9LxewgcKs5buH3sb/jqe5P4cXeLwqEZgf/DoJC2R/O/IAPj32I6f9OZ92Kfd2qMNuqAvzcuMJtmVSGO1sTMRfiEYKj04+yXVxHM4/iWOYxLDyyEDtTdiKnPAcLjy7Esaxj2J++H+PXj6/xYEUKhVK3UKHShFAEkVRA6W7OFMtaXAOXzRFvAo8dBAY8U/F+zDTeAocOiOs7SGvxte0Vv19uj1hIJESoAOSmbDZy0ZwaRlSqCjP0D+CKNRnu8O2Ew0mp+F8wF2lxk3G+Gx8dWGAfN8B5e/x06D32dVQOr90aIMKPGTp5fSdg4pnHMW3e3WYC/m1Jas3RsI/vD2L3yOGLk2pHVELjyVRpfTGw/nFu/ZCXgMm/APf9RdrQB84X1i4xSCRAmL2gN52bPsxGwxgUalSH1j6t8WjXRwU/G4Y2PuKmf9+e/haAUGjUBL7njr+bP0bHjMamuzdh48SNcFe4I1DNCbY52+fgn0RxEZ6iTaF1LBRKE4EKlSaE5/DhgMx57pCltIJaEzGkMiCkc8XW/gBn+FXsUByasNJ53yEvAjPXAIOfFz8W44xbmk1mDjFU4DBaF0gkEiwctBAv934ZHfwdOoG8QuFps8GrjEvzjJVxYsAtzy7GVkwhYqUsH0d5LqoTix2KTCP7ALdzrdPY/gaw9lHgwygu6hDQFnjqBHDn50BYN+H7o/vzTxyA0KJfbG5NhcjkQNwY5/WD7U607cYQX59R77g+BlPnknMR0GYRb59cB1O2slwyYLIOGBgm3nqsNZEIXG0jKgDw+bDP8WS3J9EzmHRORXtHs6KJnxoSg3ESBiCc8E2hUBoNOpWqCSH394ciLAymVKFwMGdnQebp2n6+xngzHiEZQO4VIGEFEN7LOZLSbx5wm73bx7cVsP9TUmPDh3Hd1WZzbbpydfVM62oI40jqhP3r8ynlTO1euHYCh6NbIQtmqJkUR3Eq8B1JG1kjyXtWZGTB12olXUtMsWpIVyB6AHHhvboFOP6z8POkcqHFfXhPwDuC82AZ9CzZ3noYu4s7b5J3a5/W1fzKAfR7HDi3mlt+7rIwAqJ0d34PH3/779X5dcCppeL72KwktcX8vtSCAeEDMK/bPHyX8J3odrbLqhaMjB6JkdEjRbdVFrW6s82dyCnPwZabW3C96DqGRQ6r9flQKJTaQSMqTQx5oHMtgaWw7pxDBTA3nqxzwMppwMEvgdWznPdjIi8AubE9fwWY4yBm+BGVWhbS1oaPh3wMAFjQbwGZMQTA7eZ+/J6Zi6UZWfC22vBKCREohQ5Ts40Acu0RrQjG76T7TCJW+szl6m1cDYv0CHSezM1P/3iFEsEXM4hddV970preJ6QPZDWZ4h3eg4ghBr6pYFVgOtCMIp1mwV24Y5fUXZfMzA5c3ZVcKhSytU39VIZEIsGUuCmCdb4qXwwOH4z4wHjEamJZwbgvbR8tqqVQmgA0otLEkAc5O7Ga60uo+NhvQnnOvhYC+CkLgEwptpP/2+8oXL4c0e88TCb/5l/j0iCNIFTGtBqDgeEDSZEqMxQRQE99Oftao/IGUIYimVBUpCrksEkkcLdaSTQFAHyigFkOE3+Z2h5HxObz8NNvIkKkf1h/rLpzFSI8I5y2VZnoASSqUpHBnyv8K4jUqTWAwo1EhOpQqPALiFv7tBb4qlSWmqkL3uj7Bq4VXsOZXOL1E+QehO9GchGeCC/yszidcxprrq3BtHbT6v2cKBSKa2hEpYkhGlEpKqqfDwtwdn1lGfw8SWUEdSIpDxfkfPQRTOnpyPnfIVLYWZhEvFmAeu/4cQV7I/QOA0Q6fnxLSIdOkUMNz1UludG3NZq4d3k6C0dBq2/3mUDsSFK0Omi+875d7yH/O6bKeHTy71T9Qlo+4z4G+jwKPLq3+u91ryCCUZbHRd1yLtXs3CphYNhAQedWbduTq4JMKsMnQznfG7NVWH/DF43vHXkPFAqlcaFCpYkhDwrkvSY3SUthUf18mNoXuG2B83rPENI59OQJ4P5/nNMZIpiLtVxKI+0k+V/lXYcnWwOUHkDbUU6r/XQkQlUik+GtmA74odNwAMBVJWkTj+PP4xETKnFjiPDoMxeY8C0w/W/gxRuClA5LSBfg6dPAg5VPbK4xag0RK8Ed6+BYPOFSlsN1BR37qXaTth347fbfMLPDTDzR/QnYwB032L0e5m+JEOIRgs+GfQZ3uTvmdBH6xDARFQAuDeMoFErDQYVKE8MtLo59rYgkw/vqrUYFEO8aYTpB/FqJt7WKoDt8BDYPe9cKY46mbAIXeSaiwUNjtaKDgYiRtZIyfKu7gdOTvkG6nGRC2Xk8Epl4a67SnfjgjFtMlqXSiiMTfq2JaGqqTCCtwZj4A3Afz4/FN4ZEagBAl0ciLHVEr5BeeLnPy1DJVDBZTex6hazmrrTVZVT0KByefhh3tblLsN7fzZ910eVHeygUSuNAhUoTQx0fz75moiv1KlSCOwGB9rbezpOBdncA47+u0aEKTjicZyPUqDjBH9LYejiJcAB4sLhEsNtPOYewxZOIiYCAjsBTp4Dn6ifd0eToNoNEhOLvBaL6AXP3AR3Gk+GHSne2KFkwy6kOYdxiazO7qaaIzSZiRjgAxMHWZDEJtqdp0+hQQwqlAaHFtE0MmUYDnymTYUy8CY++faHdsrX+alQAktZ5aCsxMOs4sVrtxDaLsCNCdy0H/vyGmKYgVDwDSTGszQbEjgBWzQCyzmFsmQ5b3SOxW0dawQ/w/FP8BjxTcZFpS0MiATx4Rayh8cA9PNt/n0hipV+U6nqqcy2YEDsB8YHxgjk9jY2/mz9UMhUMFgOyyrIQ6U2im2WmMoxdS4ZGnpl9RlToUCiUuoX+lTVBwt5/HzErV0AeQG4e9RpRAUiNQ5cp1fY8sZYKHUyNBQ7DDRupmNaJNrcRkQIAmih29eL2D+C9gc7Fkn5+sQ11Zs0DDblJOxkD1iExPjHwUDSd9JhEImHN+L48/SW7nh9J0Yq1dFMolDqHCpUmjMyXmF+ZiwphSExEyqOPQnfqdCOfFYdFKxQq5tw84K6vuBVNIaLiiB9nqqbyjsTE2IlOjrD17eXR7GBSP6U5jXseDYzeQkYkbEvahlK72zKzDgAK9fX8AEGhUABQodKkYYSKpagYma+9jrJ9+5E8fXojnxWHtYxcvKXupODQqtPB4sZzL23srh8x+C3Z9o6ethphm7bGTdOAJ9QMYNJCdVhM2xzwkHMRnhwdEWklBq62qdBAhQqF0hBQodKEkWk0AMhgQmNq/YXdK8Nw4wbyfvgRVoNwqq45h1jTy4OCIPUi0RMzeLUONmuDnWOV4Zu12d10Z3eajSgvkhKaFjcNCmnDdZ40C5gJy2W5Fe/XwnhnIDcjKaecCBV+uoeZ+EyhUOoXWkzbhJF5e5NCR5sNtnLOWdVms0FSibeJzWaDOTsbihDOQMtcWIjS3XvgPXYMzHl5kLi5sRObXWE1GJB4x50AAIlcBv+HH2a3aXfuBACoe/RA+dkzMGq1MBeXQ8XsYCxFk8M3Bhj0HGk7ttfQ9A7pjc2TNjfueTVl3JmIyq0lVOID49EvtB+OZB7Bphub0C+0H0qMXERlc+Jm/HjmR7w38D2083MxVqG6WC3A3sVAZgKgywe6zwJ63l/p2yiUlgyNqDRhJHI55MHkqd+q07HrzTmV1woULFmC68OGo2gtZ/+e9tjjyHz9dWR/tBg3Rt+O60OGQn/pEmwVGHllLuAM4XI++RS6kyfZZf3FiwAAz6FDoWrVCgBQfv4CMPJtILA90H121b7QhmbkW8DQlxr7LJoPTERFl9+459EIyCRk7MGGGxtQYiwRdIftSN6BSwWX8E3CN3X3gSlHgL0fAle3AmnHgX+errtjUyjNFCpUmjpW5/RJ+dmzFb7FZrEg55NPAQBZ75GuFt2JEyg/Q2abFP31F7vvzbsnoWSTeDShPCEBJRv/EazL/+039rU5lzxhK0JD4N6vHwCg7PAhMiX4iaOAV8O4jFLqGaZGpTRH9PexJTM8cjj7es62OdiVsstpH0eflVpRlOy8zmxwXkcRcm0nsOUVoC5/FpQmAxUqTRz3fn2d1qU/9TRM6eku35P/yxL2NWMaV/jnKnadzEc4VyZ78UeixzFlOZtaKUJIB4jNaoU5nzxhywMDoe5CjNSMN5NcnhelmeIdTgYeWgz12qLcFJnWbhrbFXa54LLoPkWGIm7h+k7g1zHAvo+B5EPV/8ASkb/rwqTqH+dWwmYDVkwGjn4PnF7e2GdDqQeoUGnihLz2muj69Bddpy50x46xr2WepMjVlM2JDktxcaWfay0vR/r8Z53WSxQK2Gw2FC5bBpjI04vc3x+KUCJgzFlZMGVmVnp8SjNCJgf87AZ4edeAS5uA7wYAWecb97waAIlEgsHhgyvcJ72UJy6WTwZSDgO73wd+GwusvJdEoYqqKPDEplRXNt38Vif/OvdaWwXH4B1vAj8OBfQlle/LYDED13fR6FYjQYVKE0em0aDNju3wGDAA6u7d2fXlp06J7m+z2aC/xFm/m/NIS2lFgw0tuXmwaIXmVbrjx8X31ZZAu3Mnshd9CACQuLlBolRC5s/NBEqceHfFXxSl+cG0dedcAP6aQf5f+0jjnlMD0TVQOD18ctvJguUiQxE2XN8g/uarW4CtrwBfdAYu/eO83VAKZJ7hlsWESkbT8U5qkmTxUuFake+fIwe/JMXKp5dVuitLwgpg+SRg5bRqnx6l9lCh0gxQRkYi6tcliF7BhTWlHuIunsYbN2Ap4NomzdnZ0F+5WmkBrvHmTeEKB2vw4NdfBwBYi0tQxEsjuXXqZN+d299aXAz9FfoU2KKItKcgb+zh1uVcBD6K4aZlt1C6BXVjX3827DO8PeBtvNDrBcE+bxx8A0aTHqIc+5H8v+Vl523/vgj8OATY9wlg0JIiWgDo+zi3T+J/pBuIIk5xGvc6/0bF+xp4D2QFiVX/jIvryf+J/wHFrtPutxQ39wHLpwCJe+v9o6hQaUZIpFK0PbAfAGAtK4Ol1Ln9t2T7dgCA5/DhbASmaM3/YNWK230zXUWGROEfrbWU299n0iTOJbegADp7NMd3+nREfMXZi/tMGM++NlylQqVFETuS/J9yWLi+vJA8abZgIr0i8UqfV7Cg3wKMih4FALi/0/04PkMYdTyXwrtgj3iLzEjiU15E/tcVkFoWiwk4s5Ks2/0e8M8z3L595wKPHSSv00+SJ3mzgbyXIoQvVDLPiIu6wmQisvn75l6p+mfwOyNrUnvU0jCVA3/cBVzfQSKrhvodJ0GFSjNDHhAARRhxfy0/cwbl5y8g6d77WPFgtteHuHXpDI9BAwEAhqvXAAASd3coorlZN97j74LnEJJ/NzhEQCwl3C9e4NNPQeZNal3KT56ETa+HzM8PwQvegJyX8gl5+22ou3Uj55F3a7mYtnh8o8n/ZpGogb4ISDvRoKdTZXQFpCahOjclEWZ0mIFp7YRhfze5m2D5gQP2KItfG2Dwc6QImY+pjPy/bi6pZfkgTLj9/BrutU8kENSBW76+E3g/CFjcitQJUTj4EQ5jKUnrHPsZyL7Irf+2L7BsIvBdP25dRkLVI1WFvIhz2jHX+90q/MibSl+aDRz5oV4/jgqVZoh7714AiGjIXrgQ5QkJSJ4+AwCx2wdIbYvMRwMAMFwjFzZFYCBUbTm7eKm7O+TBxBCu4LffoN3NhfWtWlJo5jNxIhQhIWxEhcF77Fgn0zmpWg11PMnnW/KpUGlRKNRARUMDr+1ouHMBiPCoymdufo7UJKyYWi+n8dmwzwTLOomEmyfVd67zG04tBa6RqCcsRuftAKBwJwXMUhnQYbzz9qvbanHGLRDHTrRfxwL/vsB50JjKAXO58/uMWmEhritsNqEYupVTP2YDcHoFkGcX/mr7fSGrYsuM2kKFSjNEFUdcMIvXb0D5aa7QzlxQwHb0yHx82DZkC9NGHBQEVUwMu7/U3QOKEM7rJG3ePOiOH0fGyy8j77vvyT72SIpbx45QtePcN71GjRI9N5k/8dww59165mAtHrWv621i/h/1ybd9gRVTSM2AI8d/ATY9R1IrF+yGh/V0fqOiR+HsbO4inSuTcUKlk0hR+dZXKz/oo7wU0sTvgCeOA2M+5Na5Sm8wWC3kZlJyi3TfMemciN7kf4u9MyfNnppLr6CGquCm620MZj1g5fmzlN1awzkFHP0B2DCPvJapgDuIX1d9m0FSodIMkQeQdIspQ1jhbkpJ4QkVDTsriH1fUBAU4Vw4mkRUhKZsybNmo3jDRtYJl2lvlshk8Bw2jN3Prb24Zbg8gBEqNKLS4ihJc72tsIGEis1mrxGw1wxctpsVmo1km9UKbH4eOLEE2PVug5ySRCJBjHcMACBHzhMqDhFHEwCb41iJwPbA3H3ccvs7gcA4blnlRZb7PQ7c+QVZd241sP5xuOTSP+Rm8ln7qvmKpJ8khmnNkcJkoNxet9N6mHCb3I38Tuz7xPX7xXyBbDYigI32VJ1j/UVpdk3PtvlzaRP3OiCON16jfq/3VKg0Q2QBAaLrjalpnFDRaCDTCI3dHIWKIiTYScw4wkRUAEDdvRt3Di7ex0Ro9JcuwWp0EdqmtDwaKqJy5V/iT8Jw7Gfg7weBhcHAf4uE7amHvhK+tx5dS4PcycysbH5EhcdplRLDosIxJSwERX24eVmQKYDQeCBuDFnu/bDTe1n4k7/P/uV6vzReke/pFRWfeP4N4OfbiGFaVTxImhpLJ3Cvw3oIt5n1wJJRQKI9pS0Rud2JCZVTS8lx/36QRGsc669Kc4XFtbcS/KGu3qGca7WOChWKA/KAQO51WCh87iYhZmMqL6Ki8XFyoFW1bcsaswGAx6BBcOvcGb6zZ0EZ20b8swK5z/IaNgyhC99HzF+rRPcFAPfevSEPCoIlPx+6I0eq/8VRmi6thpD/4+9z3laS0TBmWCd+c1hhAy6sJZO6934EnPnT9XuLUurttBihIoio8Fjq440SmQxXVUqs8fICgomTM7rPIv9P/oWkfNoMd3ovS0Cc6218+GF45mvOvijeRnp2tfO+TY3Ms2R8gxj8Ilf/WOftjGiTqYAFvJspIwzFXH+P2tvJr20DPu8ErLL/vjOpT3N5vXe5NAuGvMRFVHQFXDrSZgNWzQB+G1dnbfVUqDRDmNQPQAYCKqNIG2Tp3r3slGWZtzfkgYGQuruTHRUKeA4fBmVsLDT33IOAeY9DERICiUSCkNdeQ9Czzi60AODWvr1gWTN5MtTx8S7PTaJQQNWBvKcqwxMpzYi7fwLGfgyM+wQY8SZZN301Kf6ETdj6WV8o3Crevvt94fLE7zkPmKQDzvvXEUFyUmicI5cDGq6zDiPfAaRyFHpwf7OndenAzDXAtGVAn0fJSpUXENat4g/xCBQuG1xMJ+en4cpygPRTwPf9gaXjnW/MfLO5ppjSyLsG/DgY+Kwj6dLhRzL4YmHyEuHTviMBcaQ4+dG9wN0/AgPshbYXNwAnfhXu6yEesYZnCOCmIa+L08i5rL6feIncKj435YXk/7u+BCJ7A+5+9g02blt5IXB5E5B8sM4irQ0iVC5fvow77rgDPj4+CAkJwUMPPYRino37ihUrEBsbCzc3NwwYMABnKxm6d6sj8/WFPDQUkErhP2cOFJHkwqg/Q75vbvFdIfXyglStRvgXn8Nj8GBEfPE55L6+kEgkCH3nbQQ+LZzKKg8SHyCojI6u9vnJ/chFmRbUtjC8Q4G+jwIqT2DQc8DLSUDc7dyNef08wKir8BC1Rsu7mTqG+vnc9RVw/z9At+lc7YKjB0xdYCwDru9EUDkRDTluXoBcyW0fNB94NR1aNRfdPJl/HiZ3P6DjeKc6lgqRSICgTtyyK2HBF4wWI3CSF4VyLB7NOlf58RqTVHsrsNUE/DSU3PwYGNGl9gO6TBF+39vfKTwO8zsa1g2IvxeI6s9tO+XgUFvuwqvGzZuLlu16h3SUXVxPvESq0/5eXgicWUXqqpobjBhhRLNMwb1mfu/4Ytgk0m1VA+pdqOTn52P48OHw9fXFvn378Oeff+Lo0aN43e50euTIEcyePRszZszA8ePH0aVLF4wdOxY6XT1f8JoxEqkUrVb/hdjdu6CMiIAyMkKw3WfCBLZ12HPIEET9/BO8Royo8JiqNsJwteeIEQh89llI5PJqnx8T8TEXUKHSYpFIuFC4xi5mU48414XUFIPWuQ7AZgNy7YMBx3wIPLoH6P+k83t9IoGe93OpKiYlUB8Rnw1PAssnI+jE7wCAHUpgzJox+Pvq37Da7JOmFW7QSjlBUmoqxbGsGnpxPMArZryyxXm7zeYsOE4t5V4vmwh8249EY4w6YYH05ueBZXfX/Q20NAc4+TtXnFoVjv1MvDoyE4Tr+e3EjOjya8Wtm/gD0OEuYNJPwG1vcOsdoyRSKTB7I3mdc4mbCm6zuS4MV3mR4ZwAcRDmR2K+71+179uOt4ib87q5ROg0Nxihwu8AZMQbk4bjC5WfhtVJtKnehcp///2HmJgYLF26FPHx8Rg+fDgWLFiAXbvIuPRvv/0Wd911F9555x106dIF3333Hdzc3LBmzZpKjnxrIw8MhCKEeKAooqIE25QREWJvqRCpuzs8h5P8uMfAgYj89hsEzH20RufGzP2x0IjKrUEUb8J3XQzQy7sGLG4tdGo9+Tvw532AoYTcLHrNIeu9Qp3fzy865e+TtL/uawsurAUABFm4i3F6aTrePfyuYP5PiZH4EnXwIyZun538DKaaFPe6+wFD7Vb8ez9ydqrVF3PtuT3uFz9G7iXS6SNWn3FjN5BSx86ry+4mP8v9n1a8H1PjVJBIfFAyE4BjPwn30fMGqjI3Rl+eUOl2H3DPckDpITTcc0ybAUD0QNIZZC4H3vUlaaDza8jvmBgqbyCks+vzz6/EiK84DTj4Bbd8ehn5vuz7uOL3NRW2vwEU2EcUuHOpTPb7z4wk4P9eWYx1YlBY70Jl8uTJOHjwIKS8WTBSqRR6PXG4PHLkCO6+m/MbkMlkGDVqFA4dojbFVUXOpILs8Dt7qkPw668j+NVXEP7ll5XvXNH52IWKOV8oVGxmMwpWrnSy66c0c/g3RIV77Y936GtygTv1B7l53dxPLuhX7RGEwHZcmL/VEEDlIyw0jXGYduzNc4Dd+Xbtz0+EcLPZad3P534GAJitZpTZXWmjvUn06WrhVfxx8Y+afdjQlwH/WFgMJSi/7mB6xxSdqnyA3nNcHyPvqrAQlQ/f0bUuyLZP2b6y1fU++z4BPggHji8BUkUGojKRjNIc0o1z9EfxiAoffnGtmFCRyYViZvVsYI39exbSBXizEOj5ALc9uCMw7DXSpSUGE+1zhZjXyMnfSV1VU+8iOvc/8ncJAMGdAX/ewwDz/WcEimMaTFt7P58GqVHhixSTyYRPP/0UI0eS2SHp6emI4ZmQAUCrVq2Qmio+Ft1gMKCkpETwj8K51QJgLfarizIiHH733w+ZZwUOpFVAYY/o6C9fho13AS9c9Rey330PiePuqNXxKU0MjwDgzs/J67Lc2h+P3+Gxbi6Q4tA95sfrUAvtSmplnjwOxI4CPIKA7jOF+3uFcK+P/8K9tpjJv5rCi4gEWKxordAINnsrvQGAFSkAmRvEsD1pOy7kX6j0Y1JLUrE5cTNszM1MKgMi+2JBgD+GJ3yENC0vfcOYkXkGOc8a4pN3jUtxdJzIpe8AYO+HwPonxAVDdXBMo1RU7JqwgtShbH4OyD7nvJ3pNLu4gUSxtrzE1d74uhAqgbxGAJmLFHbb0eLrQ7uR9JAn73en3zzAw1/oewMAbW4j/+dUIFRSjpDhk65w9Ndpaqzhid7ZG8n3hsGTdLyhzC7EchyEbh0U1DZo14/RaMTMmTORmZmJ998n1fkGgwEaB08OtVqN8nLxIpxFixbBx8eH/RcZWcEf4y2E/wMPwGPIYER89x2kanWjnou6SxfIfHxgLS5GeUICu153gvMjyHzzLZQdOdoIZ0epF5gLek0KMpMPkXk8ZgOQdZ6LnADEWdaxK8Nxhg5z0Zy+Gnj+CnfhZFDyhDcTsrZaicfG1z1qXgDs8LX2iBRGcvLKSTssk/ZRy9UIUHO1EpcKLuHeTfdi/fX1OJ7lWhTM3DITr+x/Beuur+NWBrbDP14eKLOZ8Ms5nvhivFA8gyp2Es67yp2/Vygw429OrOiLgYTlwJKRtSuOPvYz8GVXbtlaQapLz3vgZJ7cGV64xqXzxHxPAts7rwNI8SuDWEQFIHUsTIs4n672uU695wA9ZpNuIaWLB7h248j/FTng/nq7620AN7CyKcIviB33CRFrfNT2zp/yAiJOHdO/ddD23mBCpaCgACNHjsTZs2exZ88eBNsdUdVqNYwOxmDl5eVQu7jZvvrqqyguLmb/uYq83Gq4deyIqJ9+gtdtFfgwNBASuRweQ8nTg3YPNz9IwisoLFq9GikPPNDQp0apLxhxUJzGFSZWld/Gknk8x35yFiWA0MQNAHxcpDalUuGTHp8J35H/mYvqn/cCGafI015aDSMHDjeXcB9hQXq2Lhtzts3BzWKSovB384eX0guOLDi4AA9tewjbk7aLfkyBntShvHXoLTaqUuTPfVauzi448q5zT77e4c4dRV3v5V4n7iHmeQDgGUjSafPPAkNeFL6nNk/DWxyOdW27eBdI6jHXhmFd7yW/W24+4tuBiutGZq4FBr/g3AXEoPIEJnwjXBfZlyvE9gwCxn/t3Doeal/2iQIi+5DXacfFC0cd/YU6TgTCewrX6Ytcfw2NDZO6kavFDQmZFmVdASm2dRxcWgeu1Q0iVPLy8jBo0CBIpVIcPnwYbdpwoduoqCgkJSUJ9k9OTkaEi4JQlUoFb29vwT9K08NzKJmuWbDkV+R88QVZKeIMacpqhm6YFGeCOpBiw7JcIHF3zY6Rd5W0O1aGdw1Sm8yNJv8aGep3jTfYb+l4YlBVXYHFv7k8cwZBHlwkx8+NXLyPZR3DC3vJVOVYTSwsNtcdEGuvr630I/+8/CdMVhPeyeAs7/elH0Bq7gVg51vcjkyaJaIPt27Sj8BLvLoU5smXd96I5E0XBqrnVpt/A9jycsVD+8SE6BoXtTSvZZBzBlzXPgV3AeQq158XOwIYsYCkyypiIm/6b58qNBFMWwp0mwlM/4u0jEvlpAhX7PvlWETs7k88dG57g4sONuWICjMzyitEvJ2eiVLq8sWN+ZpDRMVqtWLy5MmIiIjAtm3bnNI8AwcOxJYtWwT779ixA/36OfzBUJoVbh07sq/zf/gRSfdNR8nmzU77GW7caMjTotQXSg9u0u/yyTWbMCuVA0VViJDyDdWqChNJAYCV05y3X97kPEk35QjwwyDOy8MRpgMlvBfgGwMP3nTpGR1msK/L7ZN7Y31j0dG/I1whk1RyMwWw8cZGrL++HjtThWJw4f8mkK+BgUl1TFlCIgRT7YW77n5wgp8qC+4k3ObKEVaMP8aToXXf9nHuRmJwrDcy6cVvZCFdhakWppiWoc9cMvtoZh11h8bxUjOuUjx8fKOBid+SAluZnEt9ihWO7v1IuOzuT6KCQ17khEpziKi4ekBgUz+FQKldqAXEAY/Yo+nNoUblxx9/xJkzZ7Bw4UJkZmYiKSmJ/QcATzzxBP7880/89NNPuHz5MubPnw+tVospU6bU96lR6hGlQ+0Qf8ozH0tRUQOcDaVB4Ifg1z9WtffwayCkCq7Fse9jwmiAjPfUzNjPVwfReg2JsDA3z6Fb4dfbiSHaxqfEj8k8Bas1AIDuQd0BAF4KL4R7Oqen2mjaIM43DgsHLWTX3dPuHva1oCjWjs1mEwiYQn0hrhQ4m4ulKEix6GmVEiVSCZce00QBc7YDnSZyOz91Svhmfv2GVwjpeGEorUZEhfFkMZYCv7somHcUAdn2YmL3AOCBf7n19/8j3C9uDKkVuftHYP55YNxioNeDgJe4UWW14f9+VFTb4wrmJl7iINBN5QAcohD8c2ZSWvy266YGI1TErAAATvzaLJzY9wjionql2bU2fqt3ofL333+juLgYffr0QatWrQT/AKBbt25YsWIFPv30U8THx+Pw4cPYvHkzPD096/vUKPVIVY3iqFBpQfC7L27uA5aM5sLGruDXJlhNXMts37nAYJ4hVq8Hyf8eQUIH0qoiZr1/5+fA4weBdvabKr8I8AYvYuGYc2dgbi72m42fmx92TNmBLZO3QC13rrGL1ZB22fFtxuPl3i8jxjsG93e8H2vHk5RPrs65Y8pgMQjSRRllGfjrCjeQcJSJ3ASz5HL8p1ZjdlgIHm3TGYgb63Ss7xK+w7yd82DURJIWUwb+DUgiIU/CTPqjKr44vEJYE4BEhRw2x84PRvw4doUxvhyB7YGYgcD0v4HHD7Hij0WuJLUi8fcCmnpooJBIgCm/AUNf4UYuVAdv+/ew4Cbn1WO1Ej8gOLQe87/fzNfJGKk1JYrTydfApLO8XQgVuYobLXDSHrljirmV9vt4Lc0W612o7N69GzabTfQfw6RJk3DlyhUYDAYcP34cPXv2rOCIlOZC9MqVle6T/d77sNEpyy2D1kO5IkQASD3KGqK5hD8ePucyEQVSOSlSbDcWmLWedBqMXgjctwp4bH/Nz+/R/8gNuuME4PVsIn4Uas4Xg1/0d56XUhARHQCchAoAhHiEwEflgx5BQnt/qUSKVj6ckJvZcSb+ufsfRHpHItiDPGFrTVroHUQRv7VZjN4B8ZDabDBJJHgqhERGLpiLsT5xI3J0wrTN92e+x/70/diatJUMcWTwdIhKyBRAG7uT9dnVrmcKAcT19sNIYO9iAMAKby9MiAjDH8zU9T5zgQe3EP8RwFmo5NuFClMcHDfaOf3UUHSeBAx/tXpjDRiYFM7Ot4BvepMhnSXpgEmka4rf8sx875va5OrkQ8DnHYH1j5OvBXAdUQG4rqws+/ibiF7k+8h0khUmE7GyfUHV0rsO0KGElHrDvUd3p3UyPz+0O5MAzVQutVeyfYfTfpRmiEJNQvbzeG3nlblS8oUK44iqieJ8L9oMB/o8QpbbjRV6olSXsO4kgjJtqTDCwoSuL2/mfFXy+FbtN4SFtmYjCWUzdQXM0yQPjZsGv93OzdgJdg+GSiZe9Oml8IJSSqJE+XqhKdimRFJ34iZzjgi5ydwwZewPCJQ7F5ouOLgAd627i30gNFq4h4HXD7wOG29ZtFMq7nbi2moxct4sYpz7H/l/D0lnfervK/gf4T2A6AHczy3zDPD3A+SmlXWOm93jygulucA3gdNmAoe/Bb7gRa2Gv8695v8Osykjh862xuaq3Zzv7CruYaMiocI3gAvtRlK3APe1rpgMrHmYjNhYNZ3bt4q1bFSoUOqVmFV/IvC55xDz99/wu382Ir79BlKVChIld9Gm6Z8WRlB7MmkZqDx1INaW2rmB69OYmgRdHrD5WfKUn8or+mRccgHSavp1T+Dn2zinURets3F+nFuuWFsyg0QiYf1VGO8VAEjIScAnJz4BAEGhLsPiIYuhUHkg1K+d6HF1Zh0SchMAkNoWPtfklVz6JRKuSJLvccJHmw3c3IuP/DT43Jd8D8JMnIGeCeA8TvhRmwvrgKUTSKFykj1C5uiN09xo7WALwS9sVnkL3Zv5xcuMULm6FVj3WPWKl+sTkQ7NCrvt+GMr4u/juqz49U/MUFAm6mI2kvEKVaD6E+colGqg7tYN6m7dyOsu3BOG1IO78JqzKzcJK968GcakJAQ88ggkyhrUKFAalmB7d0vKERJVcZy/YzaQeS5MMSWDfyww7NWGOUcGfvHkqaXcjVkiJRfdhBXcxbXgJlBs71JhCn9dCBUvBSdOrLaKW58D1AHIKMsQpGsY/xXAOdICcMW7IR4hgAtD4L+v/I3uQd1RaBAKley+jyDu3wXAiLfE3wiQIXxauJ59c+AzZMlkWO5DLCLmFpVAwavHyJPJEBpoF1FeoaQgmplD5NhhxZ8d0xxxLOoVzLsxke2TfiHFxPwWfC/7zd+kA878Sb4vD+9EoyNm98+va3KEP8KCX8vS/wkSlXHk4kZg9SzAULXRATSiQmkU/B58gH1tTHIxc8SOOS8PGa+8iryvv8HlrvEo2VrBzBBK0yC4M5m5Y7MIny4ZLm4gosDRzTN6gGvTtvrCsWX34nry/4TvuJA+c+HmTxtm6kkcCz/tSHi1DpUJlXb2qMh/qf+JvqdfaD8MiSD1P10CuuCr4V9BY085KXmtu72CuVEaAJCiJaKKMY1jyPMKBF5NA/rPc31SjLOrWETl/Br8d/YPjIriIiEJbiokK7ibcLZcRtKBAPmZVmSh7+h22gw4n3ce0/6ZhsMZhyve0d6ejq5TgfbjhNt8HPzC0o4DexbV3UnWFMf28reKiDmeK/gPIvwanNCuwMTvnfdfLeIGXAFUqFAaBbmvL6JXLAcAlP63FyaHqErxps3I/mgxLCUl0O7cBZg4++30+c826LlSaoBEArQdRV5niLSmu2pXrK7pWl0g1o7qHU46TJgn/bJ8YP9npBjQkYpcU+1UJlTGtiJdOkcyuZST1ki6R/zd/LFw0EJ8MfwL7JyyEyvvWInhUVyqwcSzpv9tzG94oNMD7HJ+ORFYjqmf3PLcys31VHahknWWRJL+mU/m/xQmw/y/h9jiXYa3A4SC70eNw/elIqHSDCMqz//3PC4VXMKjO+wdUq66heKni68HSDpF6SAA9n5YebdcfZJ7VfhwMfyNyguM+TVGjtElRzFWA6hQoTQa6h494Na1K2wmE0r37hVsy37/fRT89hsy33wLpvTatbZRGokwezF16jFnAWJx0enFn1bbUKj9nNdF9ScXZw/7bJ7kA8Cud5wHrgGixbQMMd4xAIBR0aMqPIU4XxI6z9HlILuMiHatScu+N8g9CAqpgu0Q4jOn8xzIJXLWZO75Xs9j893EXDGtNA3rr6/HK/tfEbzHsSNIFKW9SHfvR8Cf95EhgH/cBZz9C9s9nAt4Mx0sCQ64q7EzeSembJyCS/mXgMA4p/cAQLZMBq1cpH28iZOtc0hZT/2D2PWPepdb5xkMjP3Q9UEkEtgCYp1Wp55fhR/O/MCaBTLYGmLK8re9udez1gFDXqj8PXIlae8e94mzIK2o/uh5Z08gMahQoTQaEokEnkNIOLtk87/sH6FVp2MLbEv37YP+svMvs/5yJSPVKY1PRB8SbdBmkhs9H0fL8Cm/AU8cAyJ7o8FReTmLDcbDxT3AaXcnKoioLLl9Cd4Z8A7mxs+t8BA+Ku4YY9eOxT2b7sFPZ0lBckWFuABJGx247wBe7v0yu46x8AdIBxCDr4pEj5hIS4XwCztzL5H/zeXApX9wys21bf1gXvrp2f+exZXCK5izbQ7Q+xHAwX03VS7DXRGheGxv84uSKh3dcr1DiV0/36jw9g9c/n6Umcpw57o78aCbAXwZbwMw8drv+DbhWyy7uIxd/8u5XzDgzwG4Xnjd6Vh1hmOazyus6u3anSeRDj1HfCIAsd/hNiOq5gIMKlQojYz3HeMAmQy6o0eRvWgRMt9+GzenTGW323Q6lO0nnQEhb3OFfxmvvtbg50qpJgo3oM1t5HVGgnCbo8FVaDwZjNcYSCTA/HPAjDVAUEfi3cJ4eVQlJVFBRCXIPQiT2k5y2ZoshslqwsV8LnLj6ZgaEMFD4SGoiRHrEgKAjgGkyLnYWAUnVH5BKJ+ssyiQEcHRz+pc2P5Yz2fR2V9YeKk1aWHxiQCePS9Yv8I/GOVSKc7mnWVTXc0FhZRLnQlSe/xi0go8Yfak7kFySTJO2spwVBMERPQGJi/BBaUSRrt0+fr01zBajCgzleHLU1+i1FQqnKJd1+Q6PBT6Rtf+mHIVcP8G4CGHoZsTv6vyIahQoTQqqlat4NaZ/DEXLl2GolV/wZiYKLqvMobLg5ro1OzmAWNRX+hQMO0oVDR1cEGsDW7eQNuRwLzDxLuFgd9K6vK9ldeoVIUvh38pur6yiIoY/JZnPvGBpDi4yFBU+UHEJuXaKbAXPE8ethAzO8wUbAtQByDWVySdoU0lNRlzdgKdJgEvXMP5aM7c86FtD+GOtXcgpaT2Q+waAv5og6wynmGbdwRJf/i1FvqLOMAvwl3dZQzw4FYgqCN2eAgNBrclbRMI1+qI3mqT6xCpVrgwO6wu4T2BqL5coa2bT7U8kahQoTQ6itCqTcNVREQg7FPiKyH3b37Fd7ckfnZxWVCJUJE1UaeEyqbuAnV27sMjh4uu57c5V4dlY5fhxV4v4oNBH+C323/DewPfYzuHiqsyW2bgfOEyz1uj0B5R8XPzQ6SX0NLeX+0vcOFluFJof1qP7A3L5F/wwsnFOJN7ht1+ueAyUrQprMldU8Zqs6LEyKVJmDQdAPL7MO8I+VfB7wZ/ttO+jEOwSqUo9grCMnu7N0O2Lluwr2OreZ3iKFTqmvtWkm7A2Ruq9TYqVCiNjsyxO8CO/2NzEfrBBwAAVccOUEaEQ92JRF/MuS6MIyhNi/+3d9/hTZXtH8C/2UmbtunepYwyLAUEVIZsEVDZQ0RFFMerKLgVFzgQJ/IDRUEQFygIvipbZMjmBdlTRheF7p2mmef3x8k5yWnSNm2TJm3vz3X1MjkrT/C0ufOM+w61frO+dpRdOQOw6bm5RF+dxwMzjninba6a+gfbMzTMbtno0HfYb4X3u6l6L4TLme2F+4U73V6buIA4TE2eipFtR6JnVE+MaTcGQXL2d82loR+pnH3vyiBgwjeC/B6FSnY4KkQZgsSgRH57x5COUEgUaB1oC1S4IRL7oORswVlsS9tWr/flC7448YWgBtP6S+tRorf7N5Wp2CGPGlwrtwUfBosBuRW5yNLlwigSIcBswQNRtwMASg2lbG+UVdUVXG6Ve972eHLtJVDqLLYHMG2jbaK9i3z0awxpSRid86Jv4bNmARYLxGp/+PfuDQCQhrN/tC0VFTCXayFRuzYZi3hJbE+2C7zwKrvkcd8C29wHkZhdJVA1j4mvaTMAmHmMrVGyzZqM7tYngD4z61cXpo4SAhLcdi2NQgOALXaYW5GLCL9ahrbaDABetQ3FZL94AaGV5SjeNA4AEKIKgZ/MtgLozlZ3AoAgeHn5lpcx7/A8/HDuB5TqS3E05ygmtrfNQ0sOTcbZAlviP8EHvg8ymo3CHhSrG9obgknRNdGZdPzKK3+ZP7RGLa6VXePnuoSbzQgsY/eXG8pRbrTVW/JYoFJZyn6hANjhOW9MbK8G9agQrwt9dLrT7SKRCCKJBIF33glJANv9Lfb3h9iP/cNoyvORdNOkehIp+y0KAA4tEU7QDE3y/SDFniaeLa437H12orAHgpRFgxZhaKuhmNR+Er/N2VyT+rKfZPvOwXdqOFLIwljwwf8+wND1d2Jx+gYAgFQshUahQbR/NKZ0nIJ7O9yLqclTAbDLsv/T9T949dZXcVcbW5Kz36/8jqzyLCw8tpDf9m7fd9ElvAv/3KXeHi+qmiVYLWN7l1xa8m312+XfALA9Up3D2InHP1/8mQ9I1BYLAnPZobIyQ5mgtELV5H1uc3EzoC9hfy9ju9d+fCOiQIV4nSIpCYr27atsc5yMx5FGsN8CafinieDylFSt+xPTrdGb0mADX2HTgnvIoIRBWDBwgSChW3VDQvVhfy2uDpAr1v27DqvOrwIArDzDFluM8ouCWCSGSCTC7Ntm441eb/ATPUUiEWZ0m4H7O92PQHkg+sb2dXrdu1rfhaTgJCwatAj9YvsB8P0elaqBCpcN+Gz+WWeHO7Uvi12u/+BNDyJJw064/Tvzb37lk9pigdqaHbbMUCboRUkrTcPZ/LO15lTJ1mZjV8Yul9vEV7JOvN21uVmNiAIV4hPs6/dEvjYbcUuqX7rGDf9UTRJHfBSX+bVqdtahrn+jb2n6xvTFgoEL+MRt7vT1nV8DAKQi10f+T+efdtgWra6hmm4VH9zuPOlZsJK9N0JVoZjQni1G6fOBSpUcNNzw2ZKTSwRVqmvybxEbtN8ccTNmdZ8FAKg0V/JzUfzFMgRYkySWGcocVmlN3jQZB64fqPb6zPHVGLnuTszcNROHbxxmEy4e+x44+g3gLMCxWNjKxoB7liS7GQUqxCcob7qJfxwydSrk8fHVHisJZv+4Fa74BqYCFxJXEe9ylqL+1cw6LU9saUQiEYa2GoqEQPfNT+F0CukEgO0ZqDBWuHROqZPChLWVBbCnUWqgkjoudTWaben/ufkzHhvacBP7QOXZ7s/i1mhbgrcbWuep7xmGwYJ/FmDpyaUoNZTyy5nbadpBKVUiXMV++bpczCZzC7BY+ECl1FCK4spih2vOOzwPFwsvYlvaNszYMUMwPHRuyyxUWgtEHr5xGDizHvjjGWDjc8BlJ0UPL/1pq13l7VQBTlCgQnxCxAvPQzNxIlqtXlXrscasLP6xIT0dFp0OJRs2wlzi29/EWqyqgcrz520F70ijC1IE8RlqubkSteGGOz7s9yGmdJwCmViGyR0m1+l1K022SfNv9X4LEX4RmNTBNhcnMSgRUpEUWeVZbMp9H8UFBL2je+ORzo9gWOIwtoI1qp+ncrXkKlaeWYnPT3yO785+B4Ctes1Nvo32Z3unuJVR/sFtEWgNVLLKs2BiTA7XzCzLxIQNE/Di3y9iz7U9ePfgu4DZBJReR5rM1luWW5IG/Pak7cRUJz3R9sOyUV0c93sZBSrEJ0iCghD97jvw6177JK7Ae+7hH5tyc5H3f4tw/aWXkPWCCzUpSOOznzAbmcIm/SJeNbEDu+pm//X9Lh3PfTjHqGMw+7bZOHz/YQxvPbxOr8nANuQwsf1E7Ji4g68aDbATS7m5OdO2ThP0tviSrHL2i1K3iG78nJ9WAWwvhEP9H6ulJ5fyj7kVQ5F+trpNMWr2d4L7d1a3H4EQM7v8mSs66Sf1Q/eI6v8+7szcCdMfzwALOiFfYptjklZwHrArXImMQ44nc0FkZGfASe0hb6NAhTQ5IQ/cz5aNB2BIz0DR2rUAAO2+fTWdRrxFbVdIL6Kj99pBeD0i2JVYe67twdM7noberHc4hmEYXCm+AqPFyA93hKrYRIv26eMBoHT7dvzbrx+0h5x8CNbB7bFs7pAKUwV+v1K3pGCNJaOMXa5tn+iOm6dyqeiSw/FFlUXYkrbFYXs7jS0gsK94DQABSg1C5EEQ280niVHHYOGghXi377vVtu3Qv78CAPKktkAln0tMF2EdXs8+w/a82OMSALYbUu21vYkCFdLkiGQyhEybBgDI++wzMBWujbMTL4m0q/virFIxaXRRatv8oL+v/Y2/0h3nLfxw7geM+X0MFv6zEJXmSohFYn4uhT2GYZD1zEyY8/KRPfdtWPR6MFWrZcM2N2ZMuzHVtovLnAsAh240LOjxFG7Cq32g0iqQ7VFZc3GNw7wfbt4JYJuH0y28G57sahuOSQ5LxqcDPuWf94zsCYlfGELMtn/HIQlDEKwMxui2o6tt25NREdivUiLDrpJ1kcnanrhbALmaLSyZX6WmD1ck1E3lINyNAhXSJCk7Of9mbi7XNnJLSK3EYmDkInbsu+8sb7eGgF1abO9/2f9zOObjox8DAL4/9z1/jlKqdDjObDeh3ZCWhos9b8GlvrdDf0nYu7Bo8CK81PMlzL51drXtClOFYckQdsXf8dzjtS7BbWw6kw45WnZ4x36i85ROUxCkCILWqMXBGwcF51wtZmuX9Y/rjz337sHph07jh7t+QKR/pOC4XjG9EK4KR/eI7ugY0hHwD0e42Zb9lhv2qW25+n+iIrDL35aEr4IxQS8C4B8OxFkrW3/Zh51ga9ACpTcAbrIuBSqEuE/gXXc53W7KdT5GTLysx0PAf/YCQbHebgkBBNlkAeBU3inBc2ergcL8nCeec5jEbjTCXFSEwh9+FGyO8o/C1OSpDq9dVc+onpCKpGxK+fKsGo9tbK/vex0MGAQpghCitPUOBsgDMLLNSADA7szdgnOulLD5SdoGta0xyAiUB2LbhG1YPmw5e1xQLD9PBYCgftJjKY9BLpajX2w/qKQqfNSp+gKSAFAklrCVwJPH2TauewRYcBPwf12Bq9YJtjVUAvcmClRIkySSSBC/fLnDdlN+vpOjCSFVfTf8O8Sp4wAAV4qvQGu09Ub+leE4FDSjm/NEd9Wttqs44ljDSX/5MvI+/wKXBg5C5XnnK3tUUhVuCmPnU/jS8I/JYsL29O0AnOd64YpK7sjYgbkH5mL+4flgGIbvUWmjaVPra8jEMtv8n1sexc1629whvgfGYsHM7jNxYMoBLLljCf5300yM2PwWJpWWCa7VzmhGuImdi5IllQIKNZAyQfiClcWAWQ9YE81RoEKIm0mCNQ7bzBSoEOKS7pHdsWX8FkT7R4MBg3MF5/h9Z/LPCI79fPDn6BPTx+l1zMXOAxVDaiosOh3/3FRUhKv3jET+55/DlJ2NojVrqm0b96HfWIULzeVa5H/1FfRXU6s9xj7p2lPdnnLYf3PkzZCL5SgzlGH9pfVYfWE1Dt04hKsl1kAlqPZARSD+NkwrKcX4snK8nl/ITqzVFQELOgH//Q+fBRi/swHky4VFuEdnQpwqEtGqcHw6aCGCxewx02Iika4OBeT+wAzHYT6es5xHPoACFdJkSYNtv1RiNVtvw5RPCeAIqQuu1ox9cJJRmiE4xn4ZsT1zcTEKvv662msbs7LAWCzIXbgQOe/PF+60MND+73/QX7nicB6XTp8Lnoori+tUS6euCpYtQ97C/0Pq2LHVH2OX6O3RFMehFplYJhieAYDP/vkMeTq21EedAxWRCAqxHHPzCzG5rBzIPgVc3AKUZwMnf3LIMKtggPmtx2HLpL/w56SdaNP2TnRKsqVy2G20fokL7wCIq8lKHJxYtzY2EgpUSJMlsQtUZAnsDHzKVEtI3XQJYxN87crchQpjBdb/u56vA/R4l8fxf4P+j09oVlXOJ59Ad/w4AEAcZJuIyX1x0F+9ipLffkfBV0tRumGD4NyyP/9ExtSHkDpxEqriVtSUGkpxuegyhvwyBHf8cgf+yfmnYW+2GrqTbKI1Rq+vdgIvl/QuKTjJYXk2h1vVwzlfyA5vtQpsBbVcXfeGPbDe9nj7W4BUYXv+8xTgu1HC4/2Fq7L+0/U//ONsbTYqjBVsD8+d89iN7YcDCb1tJ/hokVAKVEiTJVbZUnL738KWJDdlZ3urOYQ0SXe1uQtSkRTHc4/jmZ3PYO7Bufx8lXs73IvBCYOrPbd0o60WkTzRlnpd1YUNfrJmzsKN115zeq65uBgAwFRUgDEIa+T4yfz47Lnb07fDYDGAAcMXRnQ3aWgo/9iU43xCPtejYj+Jtqp7O94LhUSBN257AxGqCH571/Cu9WtY6/7AE3sBsQxI3cP+cC5udswyWyXjc1xAHN7u8zYA4ELhBdy/+X6M+W0MLncYAty/Dhj5f8LgxgMVwd2BAhXSpLX9azta//47VF3ZPwSGjIxaziCE2Ivwi0C3iG4AhMuUVVKV07wp9pSdk/nHAYMGQxYTA0WHDlDe1Knac+StWztsczYJnsvWuuSkrUDpvqx9DhlrzeVaGK9fr7GdtTGX2SaiGm84r9fD1SAKVYY63Q8AQ1sNxeEph3Fvx3shsatAPLTV0Po3LroL0Hk8+/ifb6s/rsPdQOcJDpu53qmjOUdxufgyGDBYcvJLIGkoW2/rjrlAUAIwbL7Dub6CAhXSpMnj4qDs0B6yVuy3OQpUCKm726Jvc9gWHxBfa84OkfXDWD1gAEKmPog2W7eg9bpfIG9XfRp2cUCAwzZTruP8E2cFGXUmHV8PBwAM17JwZcgQXB56J7QHDzoc7ypTXh7/2FxU5PQYbuinph4VAHyAwvVExQfEY0DcgHq3DQBw2xO1H3Pfaqc1tJwFm9vTt9uWpIe2BZ47DfR2nCDsKyhQIc2C3BqomAsKaIkyIXU0ucNkyMVywTYu22pNuJ6I4AcegNjPD2K5HCKZDAonvSYcRq8HZMI5HvrLlx2O6xjiPKlj6YYNyJj+KExFRdDu28sujzabkf/FEqfHu8L+b0Z1gUqhztqjoqq+R8XeoymP4tnuz2LVXatqDfhqFdsdaGs3BBcY5/KpXHr/qjw138cTKFAhzYJErYbSOi5e/Ot/vdwaQpoWjVKDaHW0YFtbTdsazynfuw96ay4USaCwl0R5003w691LsC308ccBAOGzZkHiJ0z6lr90mUPafS7lPocLpKI/XQvt/v3Ieu55ZM99m9+vO3MGjMmxynBtGIYR5IIxFRY6PY7rUalp6MdemCoM01OmI1jppiW/8Xa9Xp3HCffd/EC1p1WXYK+6Aoq+iAIV0mwEDGELahmuXvVySwhpeuwTvgE1Byr6S5eQ+dhj/HNxgHDIQSSTodXKlZBGsauFVF27Ivy5Z5G0dw8CBg8SBAYimQzGzExUHDkquMZt0bfh0ZRH8WavN7F06FKMaTcGSr1tRU5FlQKITGUl9P/+6+K7ZRlv3EDq6DGA0TbvxVxYTY9KZd16VNwu1G44rXV/oP9L7OPkccBdnzo/xyranw1C4wPiMbf3XADOCyj6KgpUSLMh0WgAAObSUuR/tRS5Cxd6tT2ENCUdgoW5UnpG9qz22KK1vwieV+1R4cQv+QJBo0ch9rMFEIlEkIaz8yX8+/YFAKhuvhkBw4YBAL/MmSMWiTGr+yxM6jAJfWL6IEgRhEQnqVQC7xoB/9vZqssFK76p4R06yv3kU4fgxlxdj4oLq348qlUfQKoCorsBbYcAg98A5hQDE1cCMscaTPaeufkZDEkYguV3Lkf3SLZm0LGcY04z7PqiarK+ENL0SILYb3WG9HSU79wJAAi+7z7IIiNrOo0QAuD1Xq/js38+w4jWI5CkSUKYynltHwAwZQtXxogDHSdxAuwQUMyHHzpsj3z9dZRu3oyQh6aiaBW75NiQllZj+4IUQWid7ZjjJOLVV2HMyIB23z6UbtoEWUI8wp95BiJx7d/DnaX/N5eWOmwrNZTygUpN/y4eFRgDzDrJZpfl3puLc19Gth2JkW1H8s/jA+KRWZaJ84Xn0Su6Vw1n+gYKVEizIbH+sTTYZbo0Zl2nQIUQF8QHxGPBwAUuHWvMZuc3aCZOgHrwYIjl8lrOEFK0aY3wp9nU7/LERAC1ByqB8kC0qRqoSKWQhoZCau1NBYCCL7+CskNHBA4f5vQ6FceOQX/pMjQTJ8Ciday27mzbjvQdMDEmtNO0Q6SfF/+eBLjntUOUIcgsy4TW0DSqzdPQD2k2xIGOJcqNWde80BJCmjcusaJm8mQEDBrUoGtxgYruxAlkvzcP5vJyp8cFygPR8ZowUJGGh0MkkUAkl/PDSQCQ+8knTgMOALj2zExkz5mDvM8+Q+WFCw77LU5e/+B1dunzHa3uaPgKHh/gL/MHAGhNFKgQ0qi4oR97xizfKhNPSFPHGI38cl539FYq2rThlysX/fgjrr/8itPjokpEiCxmHxtC2HT0fj168PtjPvkYsQs/AwAYr12D9rDz4ntma5mNgq+Xg7Ermsjv1zoGKtxS3lujbnXhHfk+PlCxm0BdYazAlye+xMXCi95qVrUoUCHNhiTIsUfFcI16VAhxJ3NxMVsQTyyGJKThE0tFcjkUdgniuPllABsUcaLPsTNpz8UDj03TIfC7LxHzgS2bqjQ4GIHDh0Nt7eEp3SisLVT1ehz/Pr2h6toVYU8/DQCwlGux59oerP+XrbOjN+uRq2Nfu31w+3q/T1/iLFBZeXYllpxcggkbHLPbehsFKqTZ4Aqh2aMeFULcy2RNiCYJCnJpwqorFG2FS6EN17KQOnESLnTpihtvvgUA0O7aDQA4nSiGTiHC74pzEEkdp1lyKfpLN28RDO3sSN+BxX9/4HC8f58+SFzzMzRjxwAAjGUlmLFjBuYenIuX/36ZT/QmFUsRKHc+abip4QKVCmMFv+1s/llvNadWFKiQZkMkFkNtzaUib8OWVDdeo0CFkIYq2bgJxevZHgZzUTEAYfXyhpJGCLOnXrnjDlSePg0wDIp/+QX6y5dR/vffgEiEwx3YOSLV5QER2WW9vbHf1jvz7O5nsenUGofjJSFsXhTui47YYILCwM6F2ZK2BUdz2PwuIcqQZjE/BQD8pGwSuHIjO8yVXpqOvVl7+f2ZZZleaVd1KFAhzUrsJx8jau5cxC5gEyAZb9wAYzZ7uVWENF0WnQ7XX3wRN15/A8bsbD7FvFsDldCah5AqL7DzJpQpKZg5/mMAwPHc42AYx+XKQaNH8Y//PP87GJMJucuWIi6Pgb91SoosPh6QsDV5VN3YgqZif3/+vBULzdCUMxhwyoLsa+xru5qRtilQy9mg7KcLP6G4shiLjy8W7H9lj/N5Qt5Cy5NJsyJWqRA8+V42OBGLAZMJpoICyCKc17sghNTMaDfPS3/pMszFXKCicdtriBQ1JyyrPMsOS8iiozE4YTBkYhkKKgtwrewa4gPjBccq2rTBH7eJMOowA3N2Dop+XoOCBQuxAMD8iex3c0lgIFp99y1MBYXsZF5AMIwkNwMffmNGsBbIvfArMMmL+VM8QCqyvdffr/yOMkOZYP/p/NON3aQaUY8KaZZEEgn/jY/LNGnMzkb2vPdhyMxE2c6dTifWEUKEDJm2QKXy/HkUW7PSSt3YoyJW1RKonGY/OKUREVBIFHzBwnOF5xyOrTBW4EYwO0QTVGzE9bO21T8Rxex/JUFBkMXEQJXSudrXDLbOM424wgZm1RX3a4rsJ9FmlWdBLHIMBR7Z9gh2Zux02O4NFKiQZktqXZFgsi5HTLt3Mop++AFXht6Ja0/NQN7iz73ZPEKaBGNmBv84b8ECVJ5jgwN56zZue42AYcMhi41F0OhRiFviWAW54ig7T0QWyQYLMeoYAEBuhWNO/SJ9EQqtGf1DSi3Ycm07v2/6drbwoSQuxmk7ztxWfTCSFJzkwjtpGsYmjeUfb0/fjmtljqsjj2Qfwaxds+r9Gs6G5eqLAhXSbEnC2DHlkt9+h6WiAqYcYbXQgmXLvNEsQpqMkt9/R858x5UyIpUKwfdPcdvrSNT+aPvXdsR8+CECBg9CzEeOafcB26RbrnfDaaBSWYT8QLZHJawU6HnJ8QNzvyITRosRmaWZuHfjvdiSugUA8MuoYPwwWAzGXyU4PrqAcaiF1JRF+Ufhnwf+QbgqHPm6fKSVpgEApt40FQFy53Wb6mLmzpm4ZdUt2Jq6tcHXAihQIc2Y1Dqbv3TDBly+Y6jTYywGQ2M2iRCfZ9HpULJpE0z5+bj+yqtOj2m3cwfECoVbX9d+RU3giBEIGj0amokTBcdw+VYiVNUHKoWVhSiwriJWVwJRxY6v9V/TEbxz8B3MOzwP5wrO4eU9LwMAckxF2HCbGKInHhAcf/9uC9pp2jleqAmTS+ToEt6Ffz6yzUi8dMtLgknDEpGkztetMFZgV+Yu6M16/HrpV7e0lQIV0mxJ7FYSVFcR1UgJ4QgRyP3kU1x/4UWkjhvPb4t69x3+sdjPz63zU5wRyWSI+fADRL/7Dl8ZGbALVKw9KptTN+O9Q+8JqgBnlGagQgEYqnzGZmtsj6+FifDb5d+w//p+ftt7h95DYSX7dyJh6mM4P64bv+/WfxmUz37brcMZviBYafv/+GjKowCEk4bNjBmVpkrBOQazwWGbPe7fEABSS1Pd0k4KVEizpWxfexZJQ1p6I7SEkKajeN06AIApl+2tkIaHI3jiRES98zYAIGK2814WT4l6601AKoV/nz4QWYsfpoSl8PvXXFyDJ7Y/wT+/WnIVEIkgseuh+WGQGOkRtufFtpXIgutw/JUBuDahN+bda/uILNuylZ+f01wkBibyj9to2DlHr932GoIVtgAmvdT2N/J8wXkMWjsIw9cPR3FlseBaDMPgbP5ZQS9Xtjbb4bj6oECFNFv238SqY0inQIUQgSpJzUx5eQCA4EmT0OGfo9BMaNwU6/KEBLTbuQNxixfx2+ID4/HLyF/452cLzvJZVq+WXAUA5MyeCshkEI8dgd39g1AUalfhuYbEbXN7zwUABMgDUOxf5ThL8+pRua/jfXg05VH8fPfP/Lak4CTsmbwH3SO6AwDWXlzL71tycglKDaUoqCwQ9EYBwKrzqzB502S8e+hdwfbzhecb3E4KVEizJYuKQvT77/PPlTfdhOh57wFSKeStWgGwVYElpKmwaLW4/trruNSvP/K//NLjrycJsw0FiP39vZKdVRYRIUjIBjjW3TmRdwIWxsIX1YsdMQbtD+xH+/c/xe5Ju/Hkgh0IGj0a8+6TCc6TiW3Pw1XhGN+eHfK6o9UdaNe6u+BYptKxiGFTJpfIMav7LCSHJTvsG9NuDAAgvYz9MmdhLHwVaQCCxwDw4RF2AvTl4suC7RSoEFILzbixaPXjD1B26YLIN9+AZvx4dDxxHJpJ7CQ9UzVzVwjxRRatFjfmvo2SX3+FKS8PhT/86Nbrm4qKwFQK5x/Ef764mqO9q2ruj6PZR5Femo5yYzkUEgXaatpCEhAAkUgEuUQOZXAoYj78AB++sAVqma0u2LqR6/jH4X7h/OP4gHh8NmaF4DXMWi1ailCVdTGCvhQAkK/Lh96s5/efzj+NMkMZzhecr3HuTmpJw+epUKBCmj2/nj3Reu0a+N18MwA2A6UklP0l5Eq+E9IUXHtmJko32KoCmwsLYXRjr+CN114XPA976imounVz2/XdbcmQJXyW1R/P/4g3978JgO1tse8psRerjsXGsRsxMG4glgxZgtZBrRGiZCfeV13ZY183CGArK1dVtHYtCr//ocHvxddwBRi5rLVcrhWVlF26nVqSijG/jcGkjZOw6Pgih/O5+S/Z2obfnxSokBZJag1UtAcOIGf+/FqOJsQ3aA8c4B9LNBoAgP6S8+J89br+fuG8A64Ssa/qF9cPq+5eBQDQmXQ4mXcSABDpF1njeaGqUCweshj94vpBJBLhqzu+wpzec/DqrY4ThZUptom7lio9KhaDAdlvzUHO++/DWCVPU1PHBSqlBrZHJaucLfCaEpaCEGUIGDDI1bETZ7elbXM4f2J7tteaAhVC6okLVACg8Lvvm90fGdL8MBaL4Lnypk4AbJmX3UIs/EiQxca679oe0iqwlcM2btjCVZ1CO2FC+wlOk53FL1vKP7aUlwn+P3AFGgHAlJ9fp9f0dYEKNlApN5bDwlj4HpW4gDjBqiDA1tsSHxCPF3q8gKe6PYVB8YMAADe0Nxq8rJsCFdIiSUKFf8h0x094pyGEuMj+QzFo9GhIQtlJrubCoupOqRPGZBLUv1IPGMBXFvZl/jLHtcbcUI47SIODoblvMgAg9+NPcOGmZBSuWgVLZaUwUMl1TD7XlHFBm4WxQGvU4lo5G4zEqmMF+VcAgAEbiISrwjGt8zQ82fVJRPpHQgQR9GY9ivQNu0cbPVA5evQopFIpzpw5w29btWoV2rVrB6VSiT59+uDUqVON3SzSwkjDwwXPKy9e8FJLCHFOd+oU8r74Aow1ezL/QSiTIfrdd/haVuZC9/SoGLNzALMZAJB0YD/il34FkbhpfJed2H4iP3cCYBOVuZNErRY8z3n3PeR9thAZjz3GbzPl5rn1Nb1NIVFAIWGzD7/494s4ms3WW4pTxzkEKhz7wo1yiZxPHnej/EaD2tKod6HBYMDDDz8Ms9l2Ex06dAhTp07F/fffjyNHjiAlJQUjRoxARUVFYzaNtDBV/wCb821/7BlKq9+iWSorUbZzF0xF7umpqA/GbEbapHuRv/hzFP/6X5Tv3w/dKbaCsKJdO4jkcr5XsGD5CuhOn6npci4xZrFzEOSJiXwQ1FS82etN7L/PNr8mQNbwejX2xP5qh20lmzfBnGcb7qlaS4xhGDBm9wZMjY0LSA5cP4Dr2usAgNiAWKe9WAA7hGYv2j8aADv80xCNGqi8++67SEoSVqD84osvMHLkSLz99ttISUnBkiVLoFQqsX79+sZsGmmBYhcu5B9z4/yFP/yIC127QXvwYDVnNQ+WigpYdM0rJ4S7FK3+CdeeegqXevdB8Xr31Cqpq+y5b/OPc95/H5nTH0X2nDkAAGkE2xsoCQzkj0mbOBH6q6moOHoUhT/8WK85AVyg0hTmpVQlEokgE8swp/cc3B57OyZ2mFj7SXXAFUO0Zx+kAMK5QozJhNRRo5E6YSIYk8mtbWlMr936msO2SL9IZJRmODmarRdkL8o/CkATClSOHz+OZcuWYUmVEt6HDh3C2LG2ktMSiQRDhw7FAbvZ7YR4QuDwYYi1Zrs0FeSDYRjkzJsHMAzyl7CJtMr37oXu7FlvNtPtGIsFV8eOxZXhI2DR62s/oYUp27mDf1zy22+N/vqMxYLiX2xZV6v28MmsH5oq63J7jv7yJaQ/8CBy5s1D6cZNrr2W3bVNOezqDGl0VL3a7QsmtJ+AL+/4stpv/PUli4mu9RhzcTH/2JCaCv2lS9CfP4/KMw3v7fKWQQmDsG28cEVPiDIE05KnAQAmtZ+EnpE94S/zx2+jfxPkoQGaWI+K0WjEww8/jI8++ghRUcJfgqysLCQmJgq2tW7dGpmZmU6vpdfrUVpaKvghpL6k3ITEgkJUnj7Nb5fFxkJ/NRWZjz2OtPGNmzLc08xFRTCmZ8CUkwPdsWPebo7PkQQG8Y+9sRrMkJZW435ufpWyQ3skHdgPcQA7zKG/bMsIWr53T62voz38P1zo0RMFK78FAJhL2L+lkqCgGs5qmWTRtkAlYNgwKDp2dDjGPlCx75Et27HTo23zNC7Y4MglcgyMH4iNYzfitdtewzfDvsHeyXvRVtPW8Vw1e25Dlyg3SqAyf/58REdH46GHHnLYp9frobHmA+CoVCroqumWnj9/PoKCgvif+Ph4TzSZtBBSa4Vl47VrKFjxDb+dMZtRedb2Tahs9+7GbprHmOzm4xT99DNfy4Ww7CttGzMyPDZExjAMzE6+aNVWf8o+lbw0JASBd90FAMhfZMsga7hytdbXz/nwA8BoRO6HbOpzri32gRphSe0CFUW7doLhMfWAAQAAcwlbwdliMCDnfVtupqLVqwWrqZoaZyUTRCIRWgW2gkQs4YfdnOF7VHx9Mu3p06exaNEiLF261Ol+lUoFQ5WuTZ1OB5VK5fT42bNno6SkhP+prueFEFfI4uL4uj9l22xdnObSEhizrvPPr/3nyUZvm6eYC2xj62V//omro0bDXF7uxRb5lqplFYw3GvZHtjq5n3yCf2/rhYrjxwXbzUXFDsdGvmabK1B1voSzHhD91auCfB/6q1dxdcxYlG7ezG8TSW0fLozZzH/QSoJsc18ISyyXI/SxRxEwYjhCH38M8jhboCJvw1Yd5npUuLk+HItWC0PmtUZrqyfYr6iqiyYz9PP666+jqKgI7du3h1KphFKpBAD06NED6enpSEhIQFqVrs709HTExcU5vZ5CoUBgYKDgh5D6EkkkCHn4YYftltIy6K9cEWxrypPiOIzFgvwvvxJsMxcVCYK0lqh06zYU/bwGJRs38R80XPr0kg0bcHXUaOhOnnTraxau+AZgGKTfNwXmsjJ+u7nIsf6Uf7/b0Wr1aoTPmonAu+8W7HOWaIzR6QQfmOkPToX+wgVkPf8Cv02sUPCPjVlZsHCBCv1NdSrihRcQ99lnECsUkLduw29XtK0SqGSwE00VSe2g6MSugqltOM/X3Rxxc+0HOcEFKgWVBYI6QXXl8UDl888/x9mzZ3HixAn+BwDWrVuHmJgY9O3bF1u2bOGPt1gs2L59O3r16uXpphECAPC7pafDNv3Fi6g4ckSwjfvG2VSYy8qQ8ehjON85BWU72AmixevXO7wvAA7f6lsSS2Ulsp59Ftlz5+L6iy/yuUS41OkFX34F/b//IuOxxz3WhqLVP/GP+SRiUim/TZ6YCL/uNyPsyScdltYHjR7t9Jr6S7Y5K1VrWpXv3y+4D0y5ufzQj5jmqNRK2ck2R4XrUWEqK6E7eRKZT/wHACAODII8ke2tNaQ2vDCfN73d520Mih+E5Xcur9N5QYogvjcmR1v/+V4eD1QSEhLQsWNHwQ/ATpiVyWSYMWMGfvrpJyxbtgwXLlzAs88+i7KyMkyY0LwmMBLfJW/TBrIqc50sFRUwVSn2ZioogDEnF8Ycz2egtGi1yJ73PiqO1T+AyP3kU2j37QNMJlyb8TQAQHf0H36/SKXiC8419W98DWG85tgtL42MhKJDe8E2iwcn7hsybcs9ufwtIfffD0VSO4Q9/bTTeQIcv1tvgX//fvxzZXIyAODaU0/BVFAAs10hPW7ibdXig6a8PJqjUgeK9rZ7Q56QAKl1VdD1l1/ht4tVKiistZKa+u9XlH8UFg1ehNuib6vTeSKRyC1LlL2edrBbt25YtWoVPv30U3Tt2hUHDx7Epk2boFY7JtghxBNEIhGi3noTIrmc/0Nuj5s4d+O113F5wABcHjDA43lW8hYtRtEPPyB9ypR6X0Nn7b20x03U9O/TG0m7diLyjTfY7Wk1T+BszgwZjvPclJ06Qd2/v8N2S0UFKo4da/CS9arF7ew/yLg5KvI2bdBmwwaEPz2jxmuJRCKoUrrwz/169uAfXx0zBsZrtvfHGAwwFRXxycm4e9uYncMPXdAcldqJVSrELvwM0e+9C2lYGAIGDQYgnAgdPmsmX9SxqfeoNIQ75ql4JVBhGAadO3fmn48bNw4XL16EXq/HkSNH0KNHjxrOJsT91P36od3uXWi3aydCpk3jt0tCQvgMoPb5EMr+2lH1Em6lPXSo2n1Vi9NVR1YlFcClgYP44CXipZcg0Wggb5UAADDn58PSQrNBGzMdk1cFDBsG9cCBfI0XTuH33yN9yv1IGz+hQSs5qs4rqTx7DoaMDFQcO47ynexyVmmkY5Kx6oQ8NBXqIUMQu3gRgsaN47eb8/JR9ud2/jmj16PSWqJEGhkJ9SC2cFzZjr/AVFZCHBQEWUxMvd9XSxI4fDg01p5/+6EgAIiaOweqlBTIrak39E28R6UhuEBl0bFF9b6G13tUCPEV0pAQSNRqRL76CqLnzYMsIQHxS5dCEqxxONaT81VK//wT+osX+eeGa7ZJkVkvvYwrdwwVTL6sjqlYmAKeG8oSyWT8SiexWg1IJADg0jWbm8qL/6L41/8KtiXt24ugMaMhEokQPWcOOl04j8jX2aGSvIX/xx9nsE6atFRWouLo0TpNtjZmsz0a0qgoQCwGo9Phyp3DBD1o/r17u3w9SWAg4r/4HIFDh0LZoQPaH/kfv6/qJGBuDoU8IYHPycINCar79YPIbm4McY0sIUHwXKxme2a5HhVzfn6L/P0CgG4R3QAAebo8FFcW1+saFKgQ4oRm/Di0+3MbVCmdobQr+xAwdCgAwOjisnhzuRbpD01DxuOPuxzcZM2cJXieaS18xjAMSjdsgPH6dZRu2uzsVJiLi2G0BiRcim/1wIGCY/z794fYzw8AO2zAFVyztLA/pIzFgvQHHuCDwrCnnkLiunWQhoU5zAkJGjsGqLJNd/o0Sv/8EzdefwPpDzyIwh9/dPm1uaEeRfskPmi0F/rEE4JVOXUlCQiAX292QUJlNcNUsrg4QXFOSUgIwmfNrPdrtmRV/x9KAtlARaJWQxLOJpVs6vNU6mtMuzH842J9cb2u0WJCZ7PZDGMTTrpTG5lMBon1mzFxr9D/PAlTQSHkCfHw79cfZdu3w3A9q/YTAVQcPoSKw4cBAOX79iGoytLSqpwlF+PGt+0nczpbwsowDK6OHQdTdjba7doJozWRW+RrsxE0biyuv/IqGJ0OYY8/JjhPHBgIc0kJzKUtK1Axl5QIgrOgUSP5rvqqJGo1pJGRggnWN16dLTgm/4slCLUbNqwJ96ElT0yESC53mMOgmdjwxQSSIA0A27LZyDffQMlvv/MZmKWREZBaP0QBQDNuLOSUQLNepBEREAcE8PeT/Vw3RatEVOTlw5CWBpV1JVlLE6uORVZ5FgUq1WEYBtnZ2Si2S2/cXGk0GkRFRdW4QoDUnUTtj5j57wOwJXOylLi2AsRo98FmdpLvoipuOKGqwlWr4HfLLfxzbjmxIT0d5uJiqLp2hTk/HyZrcrLcjz8BjEZIo6Mhi4+HPCEBirZtwRiNUFZJ/y0OsPaolLewQMVuyW7YjBnVBimcqqvAqhIpXe8B4f4/yxMTIYuKRnmVOU/2PR31JdEIV+/IE1rB//a+fKAii4wUvI6U5qbUm0gkgjI5GRXWuWUSu0BF3ro1Ko4ehSE1zUut874gRRCyyrNQaqjfyrlmH6hwQUpERAT8/Pya5Yc4wzCoqKhAbi67bDY6uvYCWqR+xNZkWIzBAIteX2v3fNmWrfxj7ZEjkMbEIGDIEIdcGBz7VQOtf12P1HHjAQA5777H52sAAO2evai8+C9SrTk02u34S3Bu6Sa2KF3g8OH8Pa9o61iLAwAkAex7MpeWwaLTQVxNVujmhislIG/TBuHPPF3r8UGjR6Pk99+r3S+SuP7nlOvlkIaEQD1oEHI/+ojfJw4KatCwD4frUQEAkVwO5U1s8jEuPJNGREAaZutRkTmpEExcp+ralQ9UxAG2lVNcQUNjTsPq3TRlQXI2aKYeFSfMZjMfpIRaV240V1zJgdzcXERERNAwkIeI/f3ZuQoMA0tZWY0fKEVr16Li6FH+eflfO1D+1w4kfPst/Hs5z0dgLmQnwKqHDHH4hm+4KqzfkmqX6KvixAm+N4UjjYpy6QOY61Ep/PZbXH/5ZcR+8jFfP6Y5MxeyH9nSkBCXjo949RUok5Mhb5XAT0i1Z8rORtbzLyBq7pxas7tarCULxOoAiBUKhM18hq/VU3W1Vn3Zp9YPHDEc0tBQqG7uxm8TqwMgsXvv3ARQUj+aiRNRsHQpxGq1YAI+V/LA1Aj5l3yVRqEBAJTo67cIoVkHKtycFD/rxMHmjnufRqORAhUPEYnFEKvVsJSVwVxaJvhGWlXht9853W5IT68+UOGTbgXyE15dcf2FFx22Rb76imvXYNj/cMuvr7/xZosIVLgeFUkN/w/tSYODETL1QYdaLvZKN28GpBLE2vWQOMPNZZBYg0SJXd4o5U03udSe2kjDbF/OZNbJnhK1GsEPPIDKC+ehurkbRGIxQh5+GIbUVEH+FVJ38rhYtNm0EbBYIJbL+e3SiEgAbPbflipQwQbuBbqCWo50rkWs+mmOwz3OtJT36W2uzOmw6HT8hEmuZgynpj9Y5pJiAI71VpytDKmNqmtXl46rem13DDv4Ootezw+V1XU+iDQmBvJ2wmE0iV2PbekfG6A7U3NCOK4IJDfpUuxvF6h0Tq5Te6pjnz1VFmUbDo5643Uk/vgj/2Ea+crLiP/qS1qW7AaKtm2hsFslCNjy4XBJ9lqithr292XFmRWYvHEyzhWcq9P5LSJQIcSd7Od0VEf/77+AxQJJeBja7dop2GeyrsbhlO3Ygex33mHnvfD1VtjXSPxlLaLnzUPwQ1Ndalvg3XejzYY/0Oqn1ZC5OFcpeMp98O9nS8Eu0WhcOq8pMpdrkbf4c1wePARFq1YBQJ1XuohEIrReuxZxny9GxMsvI/TR6YhbLExmlbfg02rPZxjGNvRjDVDE/v78fnetDLGfkyRWKd1yTVJ3ski2R8VcUgJLZaWXW+MdY9uNRatA9gvR2YKz2HBlAyyMBVeKrtRyJotCaB935swZpKSkYPXq1bjvvvu83RwC24x+S1kpdCdOoOSPDQh/dhbK/tqBotWrEbfo//hgRB4T6zA8VLVHhavDwxiNKP5lHfsa1vkFqpQUqFJSYC4uhu74CYikUohkMhSvXeu0bf59+jh8o6uNPC4OCV8vQ+mffyJr5iwYUlOhT03l65Q0F/aTj+3JEuq+JFfs54eAO+4QbIv56EO+1ov24CEYMjOdBkFMRQVgzS4scdI7p6iyKqu+RDIZgqfch4ojR+Dfz7EcAGkc4sBAiJRKMJWVMOXmQl4lOVxLoJQqsfzO5Rj922hUmCpQoi/BFye+wJeHv3TpfOpR8XE///wzNBoNVq9e7e2mECuxddmn7vQZpE2+D0WrV+PfW2/DjddeQ+WZM8hfugymQjbPCTdZMX7Fcr5wWdUeFQ4XpACOheEkGg1iP/4IMfPfR8Tzzwn2qYcMsR3nJIuuq+wzoV4dcVedMq02BdeefNLpdnd9cASNGoUOx/5hE3wxDEq3bnV6HDfsA4kEIuskeP/bb4dIJoNfz56C+Q0NFfXWW2izYQMkav/aDyYeIRKJ7CbUttzhnyj/KLxyKxvIlxhKsOzUMpfPpUDFx61ZswaLFi3CX3/9hYKC+k1EIu4VeOedAKwTJ50oXrMGZi5QCQ4GAKj79kWcdVWHfY8KYzA4vUZ12wE2aFEPGMA/j//ic/5xQz50JVUKMja3yX/G69edbq/P/J/qiP38EHQXm9TPUk0m4uI1bG+YWK3m55XJoqLQbs/fSFj5jdvaQnwHt/S7MSqv+zJumXJehfMva9WhQMWHHT16FOXl5bj//vvRp08f/PLLL95uEgGg6t4dgC0XhjNcTRhpSDC/jZu0aSooAGM2s4+LihxPBuBvTX9encg334Rf716IX/oVAKDVqh8R+9kCKNq1c+1NuMCYlYXKCxdw/ZVXa1zp0hSYqgT56gEDoB44EK1Wr4LIzSvkuF4tUzX3R5m16GDVnhNpcLDDxGvSPEit81RMLTiXCsAmfgOA84Xn63Rei5qjwjAMdEazV15bJZPUeVXOzz//jHvvvRdisRhTpkzBt99+i//8xzF/A2lc3FJSxoWJcVyPCgBIQ0MAsRiwWJD52GNQdOgI3bFjDuckHTwAqd15zsjjYtFq5Ur+uZ+bKo5rJt+L4p/XAAB0p06j8IcfYMrOhv7KFchbtYI0IgKRr7zsltdqTOV/7xE8j3jlZSjsEui5Eze/yL5HhTEYYMzNhTQ8HPor7ATC+OVfe+T1ie9RdOgAbNqEsh07ETp9ukvnlO3chcLvvkP0vPcgj4vzcAsbBxeo1FWLClR0RjNuemubV1773DvD4Cd3/Z+bYRisXbsW69ax8xbGjRuHGTNmICMjAwktcDKWLxHb5bzgKG+6CYasLIfufsY6aRIARFIpJKEhMOflQ3vgILQHDjq9fm1BiidFzp6N8t1/w5SdjdyPP+a3V545w+dZCZn6oMsrinyFIZVNlieNikLoY496LEgBbIGKudh2L+R+ugCF333HFgo0GiEJDxMsHybNW9Do0chbsAC6Y8dgLi52aWXdtaeeAgDkLVpUa16epqK+gQoN/fio/fv3IzMzE3369IFUKkV4eDj0ej1NqvUBIqkUoiqJ1BK+XYkOhw85FJMLGjVK8Fwa5jxnh6pnD0hCQhA28xn3NraOxAoF4hYvrvGY8n37Gqk19Vf211/Ifv99aP/3P1SePw/jDbbLPeTBBxFy//0efW0xF6jYBa2F37HJ/yoOsinWQ+5/gPIetSCyyAjIrF8wddVUs7ZnP5Gd0TWfJc3BymCopLYSHR/1cy0Aa1E9KiqZBOfeGea1166Ln3/+GQ888ABeeeUVftvatWuxevVqvPrqq+5uHqkjiVoNU0UF+0Qk4ntZAu++h1+9Ez5rJp9DgSMNDobeyfXiFi+GRKPxiQ8vVUpnSIKCBB+09prCfJXrr7wKi1aLou9/AADIrAX3pFGRNZ3mFvZViy0VFch6/gWHY9SDBnq8HcS3qDonw5iRgczpjyL+66+h7nd7tcfa1+3iel8YhgEYpto6YU2BTCzDwPiB2JK6BQAQ7u9assWm+47rQSQSwU8u9cpPXT6AzGYz1q1bh/vuuw+dO3fmfx566CGcPn0ap63VT4n32JdxF6vV/B8Pv+43QxYbC8B5ZtiQ6Y+w51TJPCsJDPSJIIVjsZafcIarR+SrLJWVsGi1gm3cip/GGLKSxUQDYjFMubm42L0HynfvdjjGk0NPxDcpkzvzjzMfewwVx44L9pvLtbhyzz3IfGqGIIWBuaQE5nItUseMxcUePV3qkfFld7a6k38coXKtEGaLClSail27dqGsrAyDBw8WbG/bti06duxIwz8+QGyXl8K+qJ1ILkfr339Dwvffwc8uLwlH3bcvEtetQ9utWwTb3b3ypKEYrrcIbLZbe8Vr1zoEAr7ElJ9f7T6uZ8WTpCEhCBzu2HPLFTUMeWgqre5pgbjq1Zz0KVNQec6WSl67bx8Ml6+gfOdOaPcf4LeX/fkncj/+GPqLF8HodDVW8G4K+sf1RztNOySHJiNY6dp8PApUfNDPP/+MIUOGQKl0THs9cuRIrF69mu0GJF4jsas063frrVX2qeF/663V9pCoOidDGhLCj1n7NJEIfk4KKOZ/6VpGSU8yl2uR+9lCaA8dEmyvLqEeYFsm6mlR77yL2AWfInr+fHQ49g+SDh5A6LRpaL1+HSJnz26UNhDfourShU38Zjd0kzpuPBiGAcMwKF5nS/hYummT4NziNWv4x9o9e5v033+5RI51I9fhp7t/gljkWghCgYoPWr58Of744w+n+z766COkp6f71DBBS2QfnATeNaJe1wizZkpVdunilja5U+zChZCEhCDhmxV8sip7BctX4N9+/QTfCBtb+a6dKFi6FBnTHoYx25afoqZApbF+byRqfwTedRc0Y8dA7Ofn1ZVcxDeI/f3RZtNGdDjyP8F2U14e9OfPQ2s3Sb265IQAYEhLQ+XJkx5rZ2OQiOuWrqNFTaYlxF1CH3sU0rAwyKKjBKnn60IzdgxkkRGQt3VfkjZ3CRw+DAHD7oRIJEKFk1wvAGDOy0f2++8j8ccfG7l11te3S5anv3QZsqgoANUHKlxyPEK8pWr2ZwAwXsuCzoXAQz14MERyOcq2boX2f0eg6tbNAy30TRSoEFIPIrEYmvHjGnwd/z593NAaz+C+8ahSUqBMToYkOFjwrQ8AYPFeFzRfMwe2eSlFP/2EnHffAwAEP/gggu6+C4oOHSBWqZxegxBvM2Zdg+7ECQCAvG1bGK44rygct3gRClZ8g7KtW6G/cIHfXvHPP5BFRzfK/CtvoaEfQkiNRDIZEtf9goTlXyPOrq4QUHNNIk+zlNsm9Jry88BYLMh++x1+mzwuFqpu3ShIIT7Hr5etRIbxRjYMaWns9ltv4bcHTRiPuC+XwK93L7T7+2+IJBIoO3YAAJTv3o2KI0dQtmMH0u9/AKnjxqN4/a8Oc1fM5VroL13y/BvyMOpRIYTUii+eZ116zTFmZnqjOQAAi12Pijm/wKGIorQZf8MkTVvsZwtwZfgIWEpKYCktgSEjAwCgSErij4l66y2I5XIEDBrEb/O75RbIW7WCIT0d6Q9O5bebi4tx4/XXYS4pgVjtD1WXLlB27Ij0++6D/tIltPppNfxuvrnx3qCbUY8KIcRl8tatIW/XFoqOHQGwOR7ss2g2JkuVoR9Daqpgv7xKUEWIr5AGByPkgQcAAPqrqWB0OkAqRdCo0ZC3aYPAu0Y4FK0EALFKhVY/rYayq/MJ+LkffYTst+YgdcxY9trW3pSyP7d76J00DupRIYS4TKxQoO3GjWCMRlxIYf9YmsvKvLKqxay1C1QKCqA9fJh/HvHSi1B06uTsNEJ8gjiAzWbNBdjS0FBI1OzKoJpWxEhDQpC4ejUu2CWQc8Z+WFYS6DiJl2PMyYU0LNTncjnZox4VQkidiWQyvmyAuajYK20QzFHJy0PxuvUAgNiFnyF0+nRawk98GleF3WAdPuUqrbty34okEvj371fjMYZrtlIXIrkcJX/8gWvPPQeLXTLHiuPHcXnAANx47bU6t78xUaBCCKkXrgaJubjYK69vP/RjuHIF5vx8QCqF2m5MnxBfJeaSRlqHTqUhdeuVVLRLqnG/7pRtybO5vBzXX34FZVu2osQumVzB18sBACW//+F0Mq6voECFEFIvfKBSUuzyOZXnzsFUWOiW1zeXljpsU7RPglihcMv1CfEkbuiHI9HULVAJnf4IZAkJkCcmImjMGLTZLMxmyy15BgBj5jX+sX1RQ/sVcTdefx0VVbI8+woKVHyQSCQS/Gg0GgwcOBBHjhzxdtMI4UmCggAA5mLnVZbtmQoLoTt5EqnjxiNt8n0Nfm2LXg+TXTZajqqWcXtCfAU39MM/twb+rpKGhqLdn9vQdusWxHwwH4o2bRD1ztv8ft0///CPK+w+O8r37kPOBx+yk+CrVGLWHjyErJdfhvbQYfgSmkzro7Zt24b27dsDAMrKyrBkyRKMGjUKqampTmsAEdLYpGFhAGpfomzMycWVO+4AY63IbMzIgP7yZSja1T8jryE9HWAYiAMCIPbzgyknBwCg7EyBCmkaxFWz1LphMmvwpEmoPH0Gxb/8Av2ly/x27vcDAMq2bgUAyFslOGRxLli2DABQ+scGdLpwvsHtcRfqUfFRMTExSExMRGJiIlJSUrB48WIUFhbigl1GQkK8ye+WngAA7f79NR5nuHKZD1I4V+8Z2aDx8CJrBXF569aQx8fz25Wdk+t9TUIakyw6WvBcM2G8W66rsCaFq03FkSPQX7xY7f5KH/qsoUCliWAYBhaLBVIpdYIR3+B/++0AAN3p0zDZ1d2pylxW7nS7fbXYuirbug0AEDD0DsDud0KZVPMEQ0J8hVilQvS8eZBGRCDx55+g7OBagFEbVbJrwXrp5i0wFxVBFheHwJEjHfanP/Cg4LlFp4MxK8vhuMbQsgIVhgEMWu/8NODbo8FgwPz589GpUycku3gTEuJpsqgoKJLaARYLtPsPVHucpbzM6fb8L5bUq1fFXFbGrzQKvm8KpKGh/D6RkyRZhPgqzfhxSNrzt1sLDCqTkyGymx4gqmWqQMQLzyPylZcdttuvqgOAjGkP4/KQO3Bjzly3tLMuWtbXc2MF8L6X0mq/dh2Q+7t8eI8ePfj19EajESqVCrt376bcEMSnqAcOgv7SZZRt24qge+52egz3By/wrrsQ+dpslO3Yiew5c2DKzoYxPR3yxMQ6vSY3J0YSEgKJ2h8RL78MY042QuxSihPSUolkMsgTE/nChaHTpyP/iy+cHyyVQj1wIMQqFaTR0TDduCHYbS4uhkSjgUWn4ys8F69Zg9BHHoa8VSuPvg97LatHpQlZt24dTpw4gRMnTuDo0aOYP38+7rnnHpw/7zsTnAgJvOceAED57r9hLnG++ocb+hEHBEAaFobgeydB1bUrAHa5cm2M2dmw2GXZNFiXWsri49j/RkYg8ccfETjszvq/EUKaEbn1dwMAVN26Vnucon0Sv0Q55sMPEPrEE4j9bAFf00t3+jQAoHjtWsF5V4aPcJh35kktq0dF5sf2bHjrteugdevW6GitpwIAN998M06ePIklS5Zg8eLF7m4dIfWi7NAeiqQk6C9dQsGKbxDx/HMOx1jK2KEfiV3eCEk4u2Ko4uhR+PfrB0nVFRBW5Xv2IPM/TyJo7BjEzJsHADBmsgXc5PEJbn0vhDQX4c8/j/L9BxA4Yjj8b78d0fPmoeLoUZT897+C4+SxtoDG/9Zb4X/rrQAA7YGDKP7lF5Tv3Qv/229HzvwPhC/AMNCdPAm/nj09/l6AlhaoiER1Gn7xNUqlEnq93tvNIEQgcORI5C1YgIJly6DqfjMCBg4U7Ddb56jwmTgBSAICAQBFq3+C7vQZtP5F+I2tbNcuaPfuRdHqnwAAJet/5QOVqj0qhBAhRevWaL9vL0QKBZuLa/w4vkCh4DhrCoyq/Hr2YJc4X7joMBzEYcwWt7a5JjT046OuX7+OtLQ0pKWl4dKlS1i1ahW+++47DB061NtNI0QgaOQ9/OPKM2cd9lv4oR+7HhW7ImmV1u5lDsMwyJ77Nh+kVMXNUaEeFUKqJ/bzExQalEVH8Y8jXnoRqu7dETLtIafnymLYuZzG7GxU2i1hltotqa5LRuqGalk9Kk3IsGHD+McKhQKJiYl47733MHHiRC+2ihBHsuhoBD/wAIp+/FGQWIpjLmNT3dsP74gDAwXHMAYDv2JHf+mS0+twxxgyrEM/CfEOxxBCnNPcey+MObkIGDQQfrfcgtDp06s9lgtITDduIP+rrwAAgaNGQiSR8sNH1c1J8wQKVHyQrxaGIqQ6SmuSKWOuk0DFmmLfPkU4N/TDKfzhR4ROfwQAoDt+wulrmAoKIAkKgvEaO/Qjb9u2oc0mpMUQK5WIfPkll46VRUQAABijEZUnTwEA/Hv3gXrgAD5QsTgJVPKXfQ1zYSEiXnnZrStUaeiHENJg0shIAID27z0o/P57wT6ui9g+UBH7C+eK5X78MQCAMZmQPWcOAEAzcYIgEZUpLw/6K1fZa4WGQhpctyJuhBDXiORyiPyEC0DUA/pDGhyMkIfY4aKqPSqMyYS8BQtQ+O23qDxzxq3toUCFENJg9mnscz9dwBY8s3LWo1Jdt7H24EH+sd9tvRD78UdQ9egBADCkszWCADSoThAhpHb+vXvzjzscPwZpSAgAQKLhipEWC44322Wn1l++4ta2UKBCCGkweWIiot9/HwDA6PXIW/w5GLMZFoMBTEUFAGGgEjD0DgC2nhgAsFRWwph13eEYRRIblOj/vYi8RYvYbRSoEOJRUXPeQsCwYUj4ZgWfawUAZHHsarvKf/8VHG8qLOQf21drdgcKVAghbqEZNxZ+t9wCAChYutRaS6SY3SmRCKrFyuPjkbR3D9pt/xMihQIAO7TDVXPVTJoEsXU7t4Sy4Ovl/FJJeds2jfGWCGmxZBERiPu/hfDv00ew3a97dwDsCj+LVgsAMBUV4frLr/DHlPzxB8zlzmt81QcFKoQQt1Hb5VDRHT/Gdw9LAgMdJtdJw8MhksshDQ8HYA1U8vP5fRy/Ho5JpVQpKW5uOSHEFbLYWLZ31GyGwZoq4Mbs14SVmE0mPo2AO1CgQghxG8299/KPxf7+fA+JNCy0ulMgjWKHfwzpGbbj7QIVRfskyOzmwATffz8FKoR4kdS6KsiUlw+GYVC+e7fDMcbr7ssCT4EKIcRtJGp/hD3zNAB2Eq3xOlsWXhpTfTFQVRe2FsmN2bNRvnMne3yELVARiUSQ2SWaCpkqLD9PCGlcfC9ofr5DlWWO/XyzhqJAhRDiVpIgDQDAXFrKf6uS1RCoOKsXomjfQfBcbLdUUmJdfUAI8Q5pGFury5SfB1N2NgC26GjSwQMImTYNgHt7VCjhGyHErSRB1uWLJSX85FdZdPWBivr2vlUuIIEstsrxdvNbxGo1CCHeI7UWFc37dAH0588DYDNUS4OD+ZV83DCuO1CPig+7cOECxo0bh9DQUPj7+6N79+5YuXKlt5tFSI0kQWzWWXNJCd/9W1OPikguR+vfbFVdAwYPcsxqaffcnRkvCSF1Z1/zp3TzFnabda6Zrbcl322vR4GKj0pLS0OfPn2QnZ2NpUuX4uDBg5gyZQqefPJJzJ8/39vNI6RaXI+KpaTEpaEfAFB27IiEld8g5OGHEV21pDwhxKeoBwx02MZNsOV6W9wZqNDQj4969913kZiYiJ07d0KpVAIAunTpgoCAAMyaNQvTp09HhPXGIMSXcIGKqagIjMEAAJDFRNd0CgA2E6Z9Nkx76kEDUb5zpyBpHCHEO+RxsQi4806U/fknv00awq7sa7I9Kjk5ORg/fjzUajXCw8Mxc+ZMGKx/wABg1apVaNeuHZRKJfr06YNTp041RrN82saNG/H888/zQQpn+vTp+PTTT6GwJsMixNeIrYEKo9MBZjMglQqWG9eHZtw4xH62AK3/+6s7mkgIaaDYTz4GxLYQQhrKTnLnAhVLSQksBoNbqiw3So/KpEmTIJFIsHXrVphMJjzxxBOQy+X45JNPcOjQIUydOhVvvPEGJkyYgM8//xwjRozApUuX4FelKFJDMQwDnUnn1mu6SiVVuTy2XlJSgtzcXPSw1jixJ5VKMWPGDHc3jxC3kQQKKyPLoqIgkkgadE2RRILAESMadA1CiPuI5HKout8M3dF/ANhW44mDgiDy8wNTUYG8BZ+h8NtvEfX22wi+d1K9X8vjgcqRI0dw7NgxZGVlIdD6B2zTpk2QyWQAgC+++AIjR47E22+/DQBYsmQJ/vrrL6xfvx4PPujefAk6kw63rb7Nrdd01eEph+Ency3wKisrAwAa2iFNksiaLt9ivY81k+r/B4oQ4rvCn5mJDGs1ZUkwG6iIRCIoO3WC7p9/UPjttwCA7DlzGhSoeHzoZ+/evejTpw+WLVuGuLg4JCcn488//0SrVq0AAIcOHcLYsWP54yUSCYYOHYoDBw54umk+ixvuKbQr8kRIU8LNUwEAVedkL7aEEOIp8sRE/rEkwJY2oOrvfEOHfj3eo5KWloZ//vkHDMNgzZo1yM/PxxNPPAGNRoMpU6YgKysLiXZvFgBat26NvXv3Or2eXq+HXq/nn5eWlrrcFpVUhcNTDtfrfTSUSqqq/SCr0NBQBAUF4dSpU0hKSnLY369fP7z11lsYOnSoO5tIiNtIgoJgvHYNAATFCAkhzYd9Bmn7MhfyKtXNZQkJDXudBp3tAq1WC4VCgd9++42fc3L58mWsWLECU6ZMgV6vh6bKTH6VSgWdzvlckvnz5/PDRHUlEolcHn7xJpFIhOHDh+OTTz7BqFGj+GEyAPjtt99w4MABJCfTt1Tiu+x7VChBGyHNk0gkQtu/tsOi1UJqlzFaUaXzgTEaG/Q6Hh/6kcvl6Nu3r2Bi7E033YTU1FQAbFBivwIIAHQ6HVQq5z0Qs2fPRklJCf+T6cYKjb5k7ty5OHv2LIYMGYL//ve/OH36NL744gtMmzYNb775JmJqyUtBiDdJ7IoQVp1cSwhpPuRxcVB2EJa8kFcJVLj5avXl8UAlOjoaaWlpgm1arRZSKduZk5CQ4LA/PT0dcXFxTq+nUCgQGBgo+GmOOnbsiH379iE4OBiPPPIIevXqha+//hqffPIJ5syZ4+3mEVIjrt4PQEM/hLQ0krAw+PXuxT83l/t4oNK7d28cOXIEhw/b5oasW7eOn3vRt29fbNmyhd9nsViwfft29OrVy+FaLU2XLl3w+++/o6ioCFqtFidOnMCjjz5KKcSJz7PvRRHL5V5sCSGksYlEIrRauRJtt7MJ4Sxlzissu8rjc1QGDx6M5ORkDB06FOPGjUN6ejp2796NjRs3AgBmzJiB3r17o1evXujfvz+WLFmCsrIyTJgwwdNNI4R4iCuZaAkhzZvE2pvKVFaCMRohsptvWRce71GRSCT4448/0KtXL6xduxaFhYX4/vvvcffddwMAunXrhlWrVuHTTz9F165dcfDgQWzatAlqmoBHSJMVOHIk1AMGIPyF573dFEKIl4gDAvjstabConpfp1Ey07Zp0wZ/2tUEqGrcuHEYN25cYzSFENIIxHI54pd+5e1mEEK8SCSRQBoZCdONGzBl34Assn5JTKl6MiGEEEI8QhbNDgMbb2TX+xoUqBBCCCHEI2RRUQAA440b9b4GBSqEEEII8QhZLJvzy5CeVu9rUKBCCCGEEI9QWrOo606dqvc1KFAhhBBCiEeobr4ZAKC/cBGWysp6XYMCFUIIIYR4hDQiAiKlErBYYMrLq9c1KFDxQYmJiRCJRBCJRBCLxQgJCcGIESOwZ88ebzeNEEIIcZlIJII0LAwAUHn6NIzXr9f5GhSo+KgVK1YgNTUVV65cwcaNG9GuXTsMGTIEf/zxh7ebRgghhLiMC1Synn8Bl4feCXNJCSqOHYPuzBnXzvdk40j9RUREINFagbJ169bo06cPgoODMWvWLNxzzz0QiynGJIQQ4vuk4WG2J2YzMh57HJWnTqHcbHbpfPq0a0Kee+45ZGRk4IyLUSghhBDibZKwMMHzyjquAGpRPSoMw4DR6bzy2iKVqsFVj4ODg9G6dWtcvnwZXbp0cVPLCCGEEM+RVglU6ny+m9rRJDA6HS527+GV1+5w7B+I/PwafB21Wg2dl4ItQgghpK6kYeENOp+GfpqY4uJiaDQabzeDEEIIcYn9HBVxPb6wt6geFZFKhQ7H/vHaazdUdnY2MjIykGzN9EcIIYT4Ovuhn6i330beZ59B5KeCf3gEcPlS7ed7snG+RiQSuWX4xVvmz5+PHj168KuBCCGEEF8nDQ3lH6tSOqPNls0QSaUo02qBb1fWfr4nG0fqLzc3F2lpabBYLMjKysLKlSuxZs0a7Nixw9tNI4QQQlwmDbfNUZFGRUGsUNTtfHc3iLjH9OnTAbC9QKGhoejfvz8OHDiArl27erllhBBCiOtEcjnabv8TYBiIlco6n0+Big9KS0vzdhMIIYQQt5HHx9f7XFr1QwghhBCfRYEKIYQQQnwWBSqEEEII8VkUqBBCCCHEZ7WIQIVhGG83oVG0lPdJCCGk5WjWgYpMJgMAVFRUeLkljYN7n9z7JoQQQpq6Zr08WSKRQKPRIDc3FwDg5+fX4ArGvohhGFRUVCA3NxcajQYSicTbTSKEEELcolkHKgAQFRUFAHyw0pxpNBr+/RJCCCHNQbMPVEQiEaKjoxEREQGj0ejt5niMTCajnhRCCCHNTrMPVDgSiYQ+yAkhhJAmpllPpiWEEEJI00aBCiGEEEJ8FgUqhBBCCPFZTX6OCpfkrLS01MstIYQQQoiruM/t2pKVNvlApaCgAAAQ34AS0oQQQgjxjoKCAgQFBVW7v8kHKiEhIQCAjIwM3HHHHThy5Ei9rnPLLbfU+9yGnt/Uzi0tLUV8fDwyMzMRGBjYqK/d1P6tvHmuN1+7KZ7b0Pu6Jd3TDTmf7unGO9fX7+mSkhIkJCTwn+PVafKBiljMTrMJCgqCRCKp9wdnQ85t6PlN8VwACAwMbPTXbor/VnRfNo1zOfW9r1vSPd2Q8+mebrxzOb5+T3Of49Xur3MLfNiMGTO8cq43X9ub77kh6vvaTfHfiu7LpnFuQ7Wke7oh59M93XjnNpS3/h9XJWKaeMnd0tJSBAUFoaSkpMFRJ3EN/ZuT5ojua9Lc+Po97Wr7mnyPikKhwJw5c6BQKLzdlBaD/s1Jc0T3NWlufP2edrV9Tb5HhRBCCCHNV5PvUSGEEEJI89WkA5W0tDSIRCKUl5fXeNzcuXMxYcKERmoVIfVH9zRpjui+Jg3RpAMVQgghhDRvFKiQGrn6TYiQpoLuadIcNef7ulkEKrt370ZYWJhgG3UhkqaM7mnSHNF9TeqjWQQqhBBCCGmeKFAhLjt58iSGDBmCgIAAREdH45lnnoHBYABg+1b0+uuvIzg4GDExMVi8eLGXW0xIzeieJs1Rc7uvKVAhLhs6dCji4uJw4MABrF69Glu2bMEXX3zB79+8eTMKCgqwa9cuvPTSS3juueeQmprqxRYTUjO6p0lz1Nzu6yYVqKxYsQLXr1/nn5tMJgCATCbzVpNajOLiYkyaNAkrVqxASkoKBg0ahGeeeQZ79+7lj4mJicGSJUvQrVs3PPfcc4iJicGJEye81+gmgO5p76F72nPovvae5nhfN6nqyR9//DF0Oh2efvppAMDly5cRHh6OiIgIlJeXg2EYiEQiAMDVq1e92dRmR6PR4IMPPsDatWtx8uRJXLp0CX///TdSUlL4Y7p06SKoghkREYGSkhJvNLfJoHvae+ie9hy6r72nOd7XTapHZdq0aXjvvfewfft2HDp0CK+99hrGjx+PpKQkKBQKrFy5EiaTCb/99hvWrl3r7eY2SdV9E9JqtUhOTsbixYvh5+eHhx56CM8995zg3NpKdRNHdE97Ht3TjY/ua89rSfd1k+pReeGFF3D9+nVMmTIFYrEYd999Nz744AOo1Wp8++23eOGFFzBz5kwMHjwY06ZNQ35+vreb3ORU903ol19+QXR0NA4ePMgfu2/fPm81s9mge9rz6J5ufHRfe15Luq+bVKAik8mwaNEiLFq0yGHf2LFjMXbsWKfnzZ0718Mtaz64b0IdOnRAQEAA/01IJpMhIyMDu3fvRlRUFA4dOoQVK1agbdu23m5yk0b3tOfRPd346L72vJZ0XzepQIV4XnXfhGQyGbZt24ZRo0YBAAYPHoxff/0V99xzj0+PbRJC9zRpjlrSfS1iGIbxdiMIIYQQQpxpWjNqCCGEENKiUKBCCCGEEJ9FgQohhBBCfBYFKoQQQgjxWRSoEEIIIcRnUaDSwl2/fh2TJ09GaGgowsLCMH78eGRlZQEAtm/fjs6dO0OpVKJr167YtWuX02ssWbIEPXv2FGw7deoUX70zLCwMEydORF5ensffDyGA5+5rexkZGQgMDMTGjRs98h4Iseepe/rNN9+ESCQS/Nxxxx0efz91QYFKC2YwGHDnnXeisLAQW7duxcaNG5Gbm4snnngC6enpGD16NG6//XYcPnwYY8eOxahRo/hfDM6OHTvw4osvCraVlZVh6NChiI+Px/79+7Fhwwakp6fj9ddfb8y3R1ooT93XVT322GMoKyvz5FshBIBn7+mcnBzcd999SE1N5X9WrVrVWG/NNQxpsQ4cOMAkJSUxWq2W33bw4EHGz8+PeeONN5hu3boxFouF39e/f3/mnXfeYRiGYYqKiphnn32WUSgUTP/+/ZkePXrwx/3777/MjBkzGJPJxG9buHAh079//0Z4V6Sl89R9bW/58uVMz549mbi4OGbDhg2efUOkxfPkPT1q1CjmjTfeaJw3Uk/Uo9KC9e7dGxcuXICfnx+/TSwWQ6/X49ChQxgzZgxf4RQARowYgQMHDgAA/v77bxw/fhy7d+/Gww8/LLhuUlISPv/8c0gkEjAMg1OnTmHZsmUYP35847wx0qJ56r7mZGVlYfbs2fjmm28gkUg8+2YIgWfv6ZycHERFRXn+TTQABSotXNUqmh988AEGDRqErKwsJCYmCva1bt0amZmZAIC77roLu3fvRq9evaq99oYNG6BQKNC1a1ekpKRg5syZbm8/Ic548r5+/PHHMWPGDKSkpLi93YRUx1P3dE5ODv766y+0b98eUVFRmDBhgqAqsy+gQIUAABiGwfPPP4+dO3di0aJF0Ov10Gg0gmNUKhV0Oh0AtuhYbQYNGoTjx49j/fr1OHXqFN58801PNJ2Qarn7vv7++++RmZmJ1157zVNNJqRG7r6nc3JyYDQa8e233+Knn35CVlYWHnnkEU81v16oKCGBTqfDgw8+iIMHD2L79u3o1KkTVCoVDAaDw3Eqlcrl66rVaiQnJyM5ORkJCQno168fZs+eLei+JMRT3H1fZ2dn48UXX8TmzZtdCtQJcTdP/K3ev38/OnfuzN/TX3/9NVJSUqDVauHv7+/291Af1KPSwul0OgwfPhwXL17E4cOHccsttwAAEhISkJaWJjg2PT0dcXFxtV5z//79WL58uWBbcnIyKisrcePGDbe1nZDqeOK+fv/995Gfn4/bb78dSqUSSqUS6enpGDduHPbs2eOJt0EIzxP3NADExMQIAu+2bdsCYANzX0GBSgv32GOPobi4GHv37hXc2H379sWWLVsEx27btq3GsXtOamoq3nzzTb7rEQAuXboEkUiE6Oho9zWekGp44r6ePXs2zp07hxMnTvA/MTExWLRoUY35VghxB0/c05s2bULHjh1RXl7Obzt37hwA+NYEW+8uOiLetHnzZkYmkzFbt25lUlNTBT8ZGRlMQEAA88477zDnz59n3n//fUalUjFpaWkO11m5cqVgyVt5eTnTpk0bZvz48czx48eZ3bt3M7feeiszcuTIxnx7pIXy1H3tTKtWrWh5MvE4T93Ter2e6dChA3P33Xczx44dYzZv3swkJyczI0aMaMy3VysKVFqwhx9+mAHg9Cc1NZXZs2cP061bN0YulzOdOnVitm7d6vQ6zv6gX7x4kRk2bBgTEBDAREdHMw899BCTl5fXGG+LtHCevK+rokCFNAZP3tNXrlxh7rnnHiYoKIiJiIhgJk+ezNy4caMx3pbLRAzDMI3di0MIIYQQ4gqao0IIIYQQn0WBCiGEEEJ8FgUqhBBCCPFZFKgQQgghxGdRoEIIIYQQn0WBCiGEEEJ8FgUqhBBCCPFZFKgQQgghxGdRoEIIIYQQn0WBCiGEEEJ8FgUqhBBCCPFZ/w9CiE+lswa9zQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 线性图\n",
    "df1 = pd.DataFrame(data = np.random.randn(1000,4),\n",
    "                  index = pd.date_range(start = '27/6/2012',periods=1000),\n",
    "                  columns=list('ABCD'))\n",
    "df1.cumsum().plot() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "aa372804-2a15-4797-8341-3f68ab277bb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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AABYRRgBAABWEUYAAIBVroSRgwcPatq0aerRo4f69OmjwsJCGWPcKA0AAMJcpBtFbr75ZpWXl2v16tVqamrSLbfcot69e+tXv/qVG+UBAEAYczyMfP7551q7dq0++ugjDR8+XJJUVFSkhx9+mDACAACcv0yzdetWBQKBUBCRpAkTJuiLL77QV1995XR5AAAQ5hyfGamqqlIgEGizLS0tTTExMaqsrFSfPn3a7AsGgwoGg6H3dXV1TrcIAECXF2hc6niNcofO63gYCQaDSkpKOmF7bGysGhoaTtheVFSkBx988Kzr9sy576zP0b5rHD6/VD7f+Rpu6A7jcP7nSXLjZ6or/7L6LqfHUe7o2b814f8tcLxGueMVpPKYmS5UqXX07PUl8x09v1u68u9axy/TxMbGqqmp6YTtDQ0Nio2NPWF7QUGBamtrQ6/KykqnWwQAABY5PjOSmZmp8vLyNttqamrU2NiojIyME473+Xzy+XxOtwUAAMKE4zMjo0eP1ieffNImkKxbt079+/dXWlqa0+UBAECYczyMZGRkaPLkyfrZz36mnTt36p133tF9992nu+++2+nSAACgC3DlDqx//vOf5ff7ddlll2nGjBnKz8/X3Llz3SgNAADCnCt3YE1KStLf/vY3N0oBAIAuhgflAQAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCpXbgcPIDz0zLnPhSrXuFADQHfCzAgAALCKMAIAAKwijAAAAKtYMwIAOKeVx8x0oUqtCzW6LsIIgC6nfD6LZIHuhMs0AADAKsIIAACwijACAACsYs0I0AGvFB1zvsjNzpcAgHBEGAEAnLGhWZmO19jteAXYxmUaAABgFWEEAABYRRgBAABWdds1I44vOGSxIQAAnaLbhpGc0hLbLQAAgA7gMg0AALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMCqbvugPKAz8eBFAHAOMyMAAMAqwggAALCKyzQAgHPbA7W2OzjnMTMCAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIqbngGABeUxM12ows280DUwMwIAAKwijAAAAKsIIwAAwCrCCAAA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Bz169OgyazLS09O1YMECPfLII1q1apVWrlypG264QfX19QoEAho6dKhWrVplu82TOnbsmKKjoyVJkZGR8ng8io+Pb3OMz+dTS0uLjfY67ODBg+rfv3+bbRkZGTp8+LD27dsnv98fHpebrEYhl02dOtUMGTLE7Nq166T79+7da8aOHWtuuukmlzs7fXfeeac5//zzTW1tre1Wzsj1119vrr76atPY2Nhme0NDgxk7dqwZPny4+ec//xnWMyO5ubnm1ltvNa2trcYYY1avXm2+/vrr0P7GxkYzbdo0M2HCBFstnrYvv/zSXHPNNebCCy80O3fuNLGxsV1qZiQ/P9/cf//95plnnjGTJ082eXl55tixY8YYY77++mszadIkk5eXZ7nTHzZ79mwzfPhwU1ZWZl566SUzcuRI89VXX4X2r1ixwvh8PjNjxgyLXZ6a1+ttM0v1XceOHTObN282CxcuND//+c9d7qzjxo0bZyZNmmTeeOMNM3v2bDNgwABzww03mGAwaIz5dhyzZs0yV155peVO2zdmzBgzbdo0880334S2PfXUUyY+Pt60traaQ4cOmeuuu86MHTvWYpfn2GWagwcPmokTJxqPx2POP/98c8UVV5gpU6aYa6+91gwZMsRERUWZGTNmdIk/8C0tLWbUqFHm3nvvtd3KGamurjaDBw8+6XRzQ0ODyc/PN9HR0WEdRoqLi02fPn3MPffcc8K+559/3qSnp5sLLrjAfPbZZxa6OzsvvviiSU1NNREREV0mjBQWFprbb7/dXHfddebiiy82WVlZJi4uznz88cfmq6++MsnJySYnJyd0zT8cHT161Pz0pz81UVFRJjs72/Tq1cv06NHDXHTRRSY9Pd14PB4zYcIEc+jQIduttuv7l8y6os8++8xceeWVxu/3m5kzZ5ojR46YG2+80SQmJpphw4aZlJQU4/f7TXFxse1W21VcXGz69+9vevbsaYYOHWoyMjJMfHy8+etf/2qM+Xbt2+DBg82nn35qtc9z8nbwX3zxhbZu3aqqqioFg0HFxsYqMzNTo0ePVr9+/Wy312EffPCB/vCHP2jJkiWKiIiw3c5pa25u1s6dO3XxxRefdP8bb7yhlStXatGiRS531nFHjx7V/v37dcEFF7TZvnnzZpWVlWny5MmKi4uz1N3Z2b9/v4qKijRv3jz16dPHdjtnbe3atbryyisVFRVlu5VTqqmp0aZNm1ReXq6vv/5a0dHRSk9P16hRo074WQtHL774oqZPn95lf/bbs2vXLpWUlCg1NVUXXXRRlxhjc3Oztm/frqqqKiUlJWnEiBHq3bu3JOl///ufkpOTLXfIs2kAAIBlXW+FGgAA6FYIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACs+v+QSGYT83fQzgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 条形图\n",
    "df1 = pd.DataFrame(data = np.random.randn(10,4),\n",
    "                  columns=list('ABCD'))\n",
    "df1.plot.bar(stacked = True) # stacked 表示是否堆叠"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "5a59c9dc-9e8f-47c2-a4da-780f495f3565",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<Axes: ylabel='One'>, <Axes: ylabel='Two'>], dtype=object)"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 饼图\n",
    "df3 = pd.DataFrame(data = np.random.rand(4,2),\n",
    "                   index = list('ABCD'),\n",
    "                   columns=['One','Two'])\n",
    "df3.plot.pie(subplots = True,figsize = (8,8)) # subplots 表示多个图；figsize 表示尺寸"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "424066c1-eaf4-4a00-8519-ec235af48dc8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='A', ylabel='B'>"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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1NDQkD744AMdOHBA+fn5Ya7auZ599lktWbJEdXV1SktLG/O6PXv2aNWqVcPfx8TE6MYbbwzJ5yKBZgLt7e3KyMgwtaWkpCg+Pl5tbW0TXpuZmTnqOowWTD9LMh1Q1tbWpsrKSt1www2hLjMiBNvXLS0teuyxx/Tyyy+PezAcRgumr30+n7Zs2SKPx6M333xTt99+u26++Wa1traGsWLnCqavvV6vKioq9LWvfU2xsbFatGiR7r33Xi1dujSMFTvbtm3b9Nxzz2nWrFnjXhfOz0XenSbQ399/3n8wt9utvr6+Ca8933UYLZh+Pld7e7sKCgqUl5enwsLCEFYYOYLpa8MwdPfdd+vBBx/UggULwlRh5Aimr3t6erR8+XJt2rRJV111lUpKSnT99deroqIiTNU6WzB93dbWppKSEpWXl2v//v3aunWrtmzZonfffTdM1TpfbGxsQNeF83Mxak7bniy3262BgYFR7X19fXK73RNee77rMFow/XxWfX29brnlFn35y1/Wz372M54eBCiYvn7xxRfV2dmphx56KFzlRZRg+nr69Om68cYbTW2XX365WlpaQlpjpAimrzdt2qSbbrpJxcXFkqQrr7xSbW1teuqpp7R8+fKw1Bstwvm5yCfABNLS0uTz+Uxtx44d0+nTpzVv3rwJr21tbR11HUYLpp8lae/evVq+fLluv/12vf7660pMTAxTpc4XTF8/9NBD+q//+i8lJiYqPj5eN910k44fP87TmgAF09eXXHLJqGt7enp00UXcdwYimL4+dOiQFi5caGpbtGiRmpqaQl1m1Ann5yKBZgLLli1TQ0OD6R9k165dSk9PV0pKiunavLw87dy509S2a9cuxmUDEEw/HzlyRLfeeqseeOABbd682TQJGxMLpq/37dun//7v/1Z9fb3q6+v105/+VLNmzVJ1dXWYq3amYPr6K1/5il599VWdOHFC0md3sdXV1crOzg5nyY4VTF/PmTNn1Ifsxx9/POo6XLiRn4tDQ0N66623QvO5OOXrpiLQ6tWrjeXLlxsHDhww3n77bePSSy81nn76aWPv3r3GggULjIcfftgwDMP45JNPjJkzZxpPPPGEcejQIeNv//ZvDbfbbfh8Pov/Bs4QaD/fcccdxpe+9CWjubnZaGlpGf46cuSIxX8D5wi0r0favXs3y7aDFGhft7S0GG6320hPTzfuueceY+HChUZCQoJx9OhRi/8GzhFoX7/xxhtGQkKC8corrxgffvihsX37dmPOnDnGj3/8Y4v/Bs50zTXXDC/bfv31140FCxYMf19XV2fEx8cb//AP/2AcOnTIWL9+vTF37lzj1KlTU14HgSYAv/vd74xvfetbxowZM4yLL77YeOihh4zBwUFj9+7dhiRj7dq1w9fW1NQYOTk5xvTp040vfOELxptvvmld4Q4TaD+7XC5D0qiva665xtL6nSSY/6fPRaAJXjB9/e///u/GokWLjISEBOOaa64xDhw4YF3hDhRMX7/wwgvGwoULDbfbbWRmZhqPP/64cebMGeuKd7BzA80rr7xiSDIeffTR4dd/8YtfGJdddpkxffp046qrrgrZ/9cuwwhgv3MAAAAbYw4NAABwPAINAABwPAINAABwPAINAABwPAINAABwPAINAABwPAINAABwPAINAABwPAINAEf7n//5H7lcLlVVVVldCgALEWgAONprr72mWbNm6dVXX7W6FAAWItAAcLR//ud/1o9//GO9/fbbOn78uNXlALAIgQaAYx04cEDd3d1as2aNli1bpu3bt1tdEgCLEGgAONZrr72mb3zjG5o2bZq+9a1vqbKy0uqSAFiE07YBOJJhGEpPT9fPf/5zLVmyRL/73e90ySWX6H//93+VlpZmdXkAwownNAAcqba2Vm1tbVq2bJkuuugiJScnq7+/n8nBQJTiCQ0AR7r//vvV2dmpv/qrvxpu+5d/+Rf967/+qw4ePGhhZQCsQKAB4DiDg4P6gz/4A7388su6+eabh9sPHz6srKwsHTx4UFdccYWFFQIIN4acADjO7t27derUKV133XWm9s9//vNauHAhw05AFCLQAHCc1157Tddff73i4+NHvXbrrbfq1VdfFQ+fgejCkBMAAHA8ntAAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADHI9AAAADH+/9VPvPKj9y+fgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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KCwsHHAzPvpWItd66tSpiEajqKmpQWdnJw4cOIDdu3fjpptukjhq9VqxYgW+973vYc+ePRg3blyf523fvh1z586NfW00GnHrrbem5L7IhGYAR48ehcViEbXl5OQgPT0djY2NA547fvz4HudRT4lcZwCiDcoaGxuxdu1aOByOVIepCYle68OHD+OZZ57BqlWr+t0YjnpK5FqHQiG89dZbyMzMhNfrxd13343i4mI0NDRIGLF6JXKtR48ejffeew+33347hg4diilTpmDRokWYOXOmhBGr25o1a7By5UpkZWX1e56U90W+Ow0gGo32+gszmUxoa2sb8NzezqOeErnO3R09ehRFRUWYPXs2ysrKUhihdiRyrQVBwIMPPohf/epXsNvtEkWoHYlc69bWVhQWFmLZsmWYPn06HnnkEfzwhz/Ee++9J1G06pbItW5sbMQjjzyC1157Dbt27UJVVRXeeustbNu2TaJo1W/o0KFxnSflfVE3u21fKpPJhHPnzvVob2trg8lkGvDc3s6jnhK5zl327t2LkpISzJgxA++//z57D+KUyLV+++23cfr0aSxevFiq8DQlkWs9bNgw3HrrraK2a665BocPH05pjFqRyLVetmwZbrvtNpSXlwMArr/+ejQ2NuLFF19EYWGhJPHqhZT3Rd4BBjBu3DiEQiFRW3NzM9rb2zF27NgBz21oaOhxHvWUyHUGgB07dqCwsBB333031q1bh4yMDIkiVb9ErvXixYvxv//7v8jIyEB6ejpuu+02/OMf/2BvTZwSudZXXXVVj3NbW1sxZAg/d8YjkWtdW1uLiRMnitqmTJmC+vr6VIepO1LeF5nQDGDWrFk4ePCg6Bfi8/mQl5eHnJwc0bmzZ89GTU2NqM3n83FcNg6JXOdjx47hjjvuwGOPPYbly5eLJmHTwBK51jt37sT+/fuxd+9e7N27F//1X/+FrKwsbN68WeKo1SmRa/39738ff/zjHxEOhwFc+BS7efNmWK1WKUNWrUSu9ZgxY3rcZI8cOdLjPBq8i++LnZ2d2LJlS2rui0lfN6VBpaWlQmFhobB7927B7/cLV199tfC73/1O2LFjh2C324UnnnhCEARB+Oabb4TLL79ceO6554Ta2lrht7/9rWAymYRQKCTz/0Ad4r3O99xzj3DDDTcIhw4dEg4fPhx7HDt2TOb/gXrEe60vtnXrVi7bTlC81/rw4cOCyWQS8vLyhIceekiYOHGiMGLECKGpqUnm/4F6xHut169fL4wYMUJ49913ha+++kr44IMPhDFjxgivvvqqzP8Ddbr55ptjy7bXrVsn2O322Nd79uwR0tPThT/84Q9CbW2t8Itf/ELIzs4Wzpw5k/Q4mNDEIRKJCG63W7jsssuEK664Qli8eLHQ0dEhbN26VQAg3H///bFzP/30U2HatGnCsGHDhEmTJgler1e+wFUm3utsMBgEAD0eN998s6zxq0kir+numNAkLpFr/dFHHwlTpkwRRowYIdx8883C7t275QtchRK51m+88YYwceJEwWQyCePHjxeeffZZ4fz58/IFr2LdE5p3331XACA8/fTTseMffvihYLPZhGHDhgnTp09P2evaIAhx1DsnIiIiUjDOoSEiIiLVY0JDREREqseEhoiIiFSPCQ0RERGpHhMaIiIiUj0mNERERKR6TGiIiIhI9ZjQEBERkeoxoSEiVTIYDKJHVlYW5syZg127dskdGhHJgAkNEamWz+fD4cOHcfjwYWzbtg2TJk3Cj370I7S3t8sdGhFJjFsfEJEqGQwG7N+/H1OmTIm1nT9/HhkZGdixYwemTZsmX3BEJDn20BCRZgiCgM7OTgwZMkTuUIhIYvyrJyJNOHfuHP7zP/8TkyZNwuTJk+UOh4gkxoSGiFTrhhtugMFgAAD861//gslkwieffBJrIyL9YEJDRKpVXV0Nq9UKAGhra8Nf//pXlJSUYOvWrZg0aZLM0RGRlDgpmIhUqbdJwQDw4IMPwmQy4bXXXpMpMiKSAycFE5GmpKenIxqNyh0GEUmMQ05EpFrffPMNLrvsMgAX5tDs3LkTa9aswapVq2SOjIikxiEnIlKliyf+Dh8+HBaLBQ8//DAeffRRmaIiIrmwh4aIVImfxYioO86hISIiItVjQkNERESqx4SGiIiIVI8JDREREakeExoiIiJSPSY0REREpHpMaIiIiEj1mNAQERGR6jGhISIiItVjQkNERESqx4SGiIiIVO//AXm89+JqWq6cAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 散点图\n",
    "\n",
    "df4 = pd.DataFrame(np.random.rand(50, 4), columns=list('ABCD'))\n",
    "df4.plot.scatter(x='A', y='B') # A和B关系绘制\n",
    "\n",
    "# 在一张图中绘制AC散点图，同时绘制BD散点图\n",
    "ax = df4.plot.scatter(x='A', y='C', color='DarkBlue', label='Group 1');\n",
    "df4.plot.scatter(x='B', y='D', color='DarkGreen', label='Group 2', ax=ax)\n",
    "\n",
    "# 气泡图，散点有大小之分\n",
    "df4.plot.scatter(x='A',y='B',s = df4['C']*200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "b2495554-5d49-469c-b85c-3ff56a2687c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 面积图\n",
    "\n",
    "df5 = pd.DataFrame(data = np.random.rand(10, 4), \n",
    "                   columns=list('ABCD'))\n",
    "df5.plot.area(stacked = True);# stacked 是否堆叠"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "66cbcf90-af80-4d08-9fb6-bac17682ad18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 箱式图\n",
    "\n",
    "df6 = pd.DataFrame(data = np.random.rand(10, 5), \n",
    "                   columns=list('ABCDE'))\n",
    "df6.plot.box()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "575a5ee9-c84f-4dde-9772-52704b2123a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<Axes: title={'center': 'A'}>, <Axes: title={'center': 'B'}>],\n",
       "       [<Axes: title={'center': 'C'}>, <Axes: >]], dtype=object)"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "/home/eugene/miniconda3/envs/aicourse/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 8722 (\\N{MINUS SIGN}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGdCAYAAAAfTAk2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvD0lEQVR4nO3de1RU9eL//9eACIMJ9MESDRAyTUTDshLxciLToIuJl8rjpbS7WpqZScYqj36iY6Xlp2gdNT4nUyvRtLDQ8KR5AcxMUzM9XQAJr2RcKpzhwPz+6Nd844OUjAx72Dwfa81aZ97vmb1fe1bF67z3ntkWh8PhEAAAgIl4GR0AAACgsVFwAACA6VBwAACA6VBwAACA6VBwAACA6VBwAACA6VBwAACA6VBwAACA6bQyOoBRampqdPToUbVt21YWi8XoOAAA4Bw4HA5VVFSoY8eO8vKqf52mxRaco0ePKiwszOgYAADABUVFRQoNDa13vsUWnLZt20r69QMKCAgwOA0AADgX5eXlCgsLc/4dr0+LLTi/nZYKCAig4AAA0Mz82eUlXGQMAABMh4IDAABMh4IDAABMp8VegwMAQHNTXV2tqqoqo2O4lbe3t1q1anXeP+FCwQEAoBn46aef9P3338vhcBgdxe38/f3VoUMHtW7d2uVtUHAAAPBw1dXV+v777+Xv76+LLrrItD9Q63A4ZLfbderUKeXn56tLly5/+GN+f4SCAwCAh6uqqpLD4dBFF10kq9VqdBy3slqt8vHxUWFhoex2u/z8/FzaDhcZAwDQTJh15eb/cnXVptY2GiEHAACAR6HgAAAA0+EaHAAAmqmF2f9u0v09OrirS+87cOCAevbsqZUrV2r06NGNnOrsWMEBAABu9fbbbysoKEgrV65ssn1ScAAAgFu98847WrRokTZt2qQffvihSfZJwQEAAG7z2Wef6aefftKYMWMUFxenjIyMJtkv1+AAMKWmvjahMbh6fQPgyd5++23dcccd8vLy0l//+lf985//1IMPPuj2/bKCAwAA3MLhcGjVqlX661//KkkaPny4du3apSNHjrh93xQcAADgFjt27FBRUZHi4uLUqlUrXXTRRbLZbE1ysTEFBwAAuMXbb7+tsWPHau/evc5HSkpKkxQcrsEBAACNrrq6WqtXr1Z6erp69OjhHLdarZo7d67279+vnj17um3/rOAAAIBGt3nzZlVUVOj666+vNd65c2d169bN7as4rOAAANBMefI3795++20NGjTorHcDv/XWW7Vy5Uo9++yzbruBKCs4AACg0S1dulTvv//+Wefmz5+vwsJCt94dnYIDAABMh4IDAABMh4IDAABMh4IDAABMh4IDAABMh4IDAABMh4IDAABMh4IDAABMh4IDAADcwmKx1HoEBQXpuuuu065du9y+b27VAOCPbU41OoGLRhgdAHC/pv73Mz65wW/ZuHGjunb99ZYSFRUVSktL09ChQ5Wfn3/W2zg0FgoO0ITS9qYZHaHBJhkdAECz1rFjR0VERDif/8///I/S09N16NAh9erVy2375RQVAABoMg6HQzU1NWrVyr1rLKzgAACAJmG32/Xcc88pKipK0dHRbt0XBQcAALhN7969nXcNr6qqktVq1ZYtW9x6J3HJ4FNU+/bt06BBg9S2bVu1a9dOo0aN0qlTpyRJAwYMqHP19bx585zvXbFihS677DL5+fkpLi5O+/btM+owAABAPVavXq29e/dq7969+uyzz5SamqpbbrlFX331lVv3a1jBqaio0ODBgxUWFqYdO3YoMzNThYWFmj17tiTpxIkTevnll5Wfn+98PPzww5KkvLw8jR8/XmPGjNGuXbvUs2dPJSYm6pdffjHqcAAAwFlERkaqW7du6tatm6688ko9/PDDuuWWW5SW5t4vXRh2iur48eMaNWqUXn75ZXl7e0uSxowZo3fffVfSrwUnOjq61pXXv3n11Vd16623as6cOZKktLQ0bdq0SWvWrNG4ceOa7BgAAEDD+fn5yWazuXUfhq3gdOnSRa+88oq8vb3lcDi0b98+LV68WCNGjNCZM2dUXl6ukJCQs743Ly9PSUlJzufe3t4aPHiwcnJymio+AAA4B0ePHlVBQYEKCgr09ddfa8WKFXrjjTc0ePBgt+7X8IuMMzMzNWLECFVVVemOO+7QI488osLCQknS/PnztWnTJvn6+mrEiBGaN2+efH19VVxcXGdlJzIyUtu2bat3PzabrVZbLC8vd8vxAACA/+fGG290/m9fX19FRERo3rx5GjVqlFv3a3jBiY+P1549e3T48GE99dRTSklJ0a233ipJCgkJUWZmpr799ls98sgjCg4O1qxZs2Sz2RQUFFRrO1arVZWVlfXuJzU11XlKCwAAU3Dhl4WbksPh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FxYWauDAgfXuy9fXV76+vu45EAAA4FEMLTj33XefSktLtW3btlqnnMaOHaugoCAtWbLEOXbw4EF16NBBFotFcXFxysrK0jXXXCNJ+vnnn7V9+3bNnDmzqQ8BML3c734wOoJrwo0OAMBIhhWcrKwsrVq1SpmZmSotLVVpaalz7v7779dNN92kHj166Prrr9emTZu0ZMkSLVu2TJI0bdo0jR49WlFRUerevbvmzJmjTp06/eEKDgAAaDkMKzgZGRmqqqpSQkJCnbn8/HwtX75cf/vb35ScnKzQ0FClpqbq9ttvlyTdfPPNmj9/vmbMmKETJ04oLi5O7733Xp1vZQEAgJbJ4mihP/9bXl6uwMBAlZWVKSAgwOg4cEHa3jSjIzRc/jajEzTYlacvMTqCS/LC7zc6QoM9Orir0REAj3euf79Z8gAAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKZDwQEAAKbjUsHZtq353U8HAAC0HC4VnEGDBik8PFyPP/64du/e3diZAAAAzotLBefUqVN69tlnVVBQoPj4eHXt2lVPP/20vvrqq8bOBwAA0GAuFZzAwECNHTtWGRkZOnXqlF566SUdO3ZM/fv3V69evTR//nyVlJQ0dlYAAIBzct4XGRcUFGj//v3at2+fvLy8FBsbq9zcXHXu3FkrVqxojIwAAAAN0sqVN3366adat26d1q5dq++//15Dhw7VU089pYSEBLVq9esmt2zZopEjR2rMmDGNGhgAAODPuFRw+vfvryFDhiglJUXDhg2Tv79/ndeEhISoe/fu5x0QAACgoVwqOMeOHdN//dd/qayszFluDhw4oO7du8vL69ezXt26ddPWrVsbLykAAMA5cukanB9++EFRUVFKSUmRJFVXV+umm25Sly5ddODAgUYNCAAA0FAuFZyHHnpI1157rV544QVJkre3t/Lz85WQkKBJkyY1akAAAICGcvki4507d8rX19c55u3trUmTJik2NrbRwgEAALjCpRWcSy65RHl5eXXGc3NzFRoaet6hAAAAzodLKziPP/64Jk2apC1btuiKK65QTU2NvvjiC61Zs0avv/56Y2cEAABoEJcKzj333KPo6GitWLHCeePNiIgIbd++XVdffXWjBgQAAGgolwqOJMXGxnK9DQAA8EguFZzq6mq99dZb2r17t8rKyurMp6enn3cwAAAAV7lUcB544AGtXr1at912my6++OLGzgQAAHBeXCo4a9as0TvvvKMbb7yxsfMAAACcN5e+Jh4UFKSgoKBGjgIAANA4XCo4zz//vJ588kkVFxc3dh4AAIDz5tIpqoceekjl5eUKDw/XhRde6LzB5m9OnjzZKOEAAABc4VLBWb16dWPnAAAAaDQuFZy//OUvkqQ9e/YoPz9fgwcP1pEjR3T55ZerVSuXf1oHAACgUbjURo4cOaJhw4bp66+/VmVlpQ4ePKi7775bZWVl2rhxoyIjI89pO0ePHtX06dOVnZ0ti8Wiv/zlL1q0aJEuueQSZWdn69FHH9U333yjyy+/XC+99JLi4+Od712wYIEWLFig06dPa+DAgVq8eLHCw8NdORwA8AgLs/9tdIQGe3RwV6MjAGfl0kXGU6dOVe/evVVaWiofHx9J0tatW9WtWzdNmzbtnLZht9s1ZMgQnT59Whs2bND69et18uRJPfDAAyosLNRtt92m/v37a+fOnUpKStLQoUOdFzVnZGRo5syZmjVrlnJzc+Xn56dhw4bJ4XC4cjgAAMBkXFrB2bFjhzZt2iRvb2/nmNVq1dNPP60bbrjhnLaxe/du2e12rVu3Tv7+/pJ+/XbWoEGDtHTpUl1++eV67bXXZLFYFBMTo82bNys9PV0pKSlatGiRpkyZoilTpkiS3nzzTXXs2FHbt2/XgAEDXDkkACYTe2Sx0REaLC/8fqMjAKbh0gpOq1atVFNTU2e8qqpKbdq0Oadt9O3bV4cOHXKWG0ny8vKSzWZTXl6ehg0bJovF4pxLTExUTk6OampqtGvXLiUlJTnn2rZtq379+iknJ8eVwwEAACbjUsEZPHiw/vu//1tnzpyRJFksFn333XeaOXNmg37d+P9+vfy5555TfHy8iouLFRERUWsuMjJSRUVFKikpkc1mq3ceAADApYKzaNEiORwOtWvXTna7XTExMeratavat2+vhQsXNnh7DodD06dP18cff6xFixbJZrPV+aVkq9WqyspK2Ww2Sap3vj42m03l5eW1HgAAwJxcugYnMDBQq1evVmlpqQoKCiRJnTp10oUXXtjgbVVWVmrcuHHKzc1Vdna2oqKiZLVaZbfb67zOarXKarVKUr3z9UlNTdWcOXManA8AADQ/Lq3gHDx4UAcPHtTRo0fVunVrtW7dWseOHXOOn6vKykolJCTo8OHD2rlzp6655hpJUnh4uLM4/aawsFChoaEKDg6Wv79/vfP1SU5OVllZmfPB6SwAAMzLpRWcHj161Bn7/QXB1dXV57Sd++67T6Wlpdq2bVutU079+vVTVlaWHn/8cefYxo0bNWDAAFksFsXFxSkrK8tZiH7++Wdt375dM2fOrHdfvr6+8vX1PadcAACgeXOp4JztG1Tfffedpk6dqhEjRpzTNrKysrRq1SplZmaqtLRUpaWlzrnx48fr73//u+bOnatRo0Zp7dq1ys3NVXp6uiRp2rRpGj16tKKiotS9e3fNmTNHnTp10sCBA105HAB/4H2vb4yO4JKhNZcZHQGAgRrtvgqXXnqplixZor59++ruu+/+09dnZGSoqqpKCQkJdeby8/P1wQcf6JFHHtG8efPUuXNnrV27Vp06dZIk3XzzzZo/f75mzJihEydOKC4uTu+9916db2UBAICWyeJoxJ///fHHHxUZGVlrNcZTlZeXKzAwUGVlZQoICDA6DlyQtjfN6AgNl7/N6AQNVlRa/7cTPVlzXMFpjj/0x60a0NTO9e+3Sys4aWl1/7BUVFTonXfe0ZAhQ1zZJAAAQKNxqeBkZGTUGQsMDNTw4cM1derU8w4FAABwPlwqOJs3b27sHAAAAI3GpYKzbNmyc37t+PHjXdkFAACAy1wqOAsXLtSBAwfk7e2tkJAQVVdX6/jx4/L29lb37t3123XLFouFggMAAJqcSwVnxIgR6tatm9LT0523RygrK9O9996rq6++Wk888USjhgQAAGgIl344ZuHChXriiSdq3fspMDBQs2fP1oIFCxotHAAAgCtcKjgBAQH69ttv64wfPXq01i0bAAAAjODSKap7771X9957rz7//HPFxMTIy8tLX375pV599VWuuQEAAIZzqeDMnj1bl156qVauXKn169fL4XAoNDRUqampmjBhQmNnBAAAaBCX70U1evRojR49WqdPn3b+VHKrVo12aysAAACXuXQNTmVlpaZNm6aAgABdfPHF+u6773TddddpwoQJOnPmTGNnBAAAaBCXCs6TTz6pXbt26aOPPnKu2ixcuFB5eXl6/PHHGzUgAABAQ7lUcNauXav58+crNjbW+a2pa665RosWLdLq1asbNSAAAEBDuVRwysrKFBwcXGc8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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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cFwul958801NmzZNklReXi673e61T1RUlMrKyi6p/0LHcDgcXhsAAKg/FotFCQkJev7553XmzBmvvg0bNig3N1c9e/asl2M3ioCzYcMGBQUF6be//a2kc2EkJCTEax+bzSan03lJ/bVZuHChgoODPVtERESdjgEAAJzvqaee0j/+8Q8NHTpUWVlZKiws1Kuvvqp77rlHKSkpat++fb0ct1EEnMzMTN1xxx2yWCySzoWV6upqr32cTqdsNtsl9dcmOTlZlZWVnu1isz0AAKBudOvWTTt37tTVV1+t++67T3FxcVq6dKmef/55Pfnkk/V2XMPvg/PTTz9p+/btWrNmjactMjJSxcXFXvuVlJQoPDzcq//mm2+utb82AQEB9XatPQAARvDlzsJGuPHGG/Xuu+826DENn8H57LPP5HA4NGDAAE9b//79tW3bNtXU1Hjatm7dqri4OE9/dna2p6+mpkY5OTmefgAA0LwZHnD27Nkju92uNm3aeNqSkpLkcrk0c+ZMHThwQMuXL9eqVas8i5BnzJihNWvW6I033tDBgwc1a9YsVVVVady4cUYNAwAANCKGB5zPP/9cvXr18mqz2WzKzs5WYWGhbrrpJi1YsEDLli1T3759JUm9e/dWRkaGFi9erJiYGOXl5Wnz5s1e99UBAADNl+FrcJYtW1Zre8+ePfXpp59e8H1JSUlKSkqqr7IAAEATZvgMDgAAQF0j4AAA0ES43W6jS2gQdTFOAg4AAI2cv7+/JJ13Dziz+vnh2S1btvT5MwxfgwMAAC6uRYsWCgwM1LFjx9SyZUv5+ZlzfsLtduvUqVM6evSoQkJCPMHOFwQcAAAaOYvForCwMBUVFamkpMTocupdSEiI2rVrd0WfQcABAKAJaNWqlbp06WL601QtW7a8opmbnxFwAABoIvz8/GS1Wo0uo0kw50k8AADQrBFwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6RBwAACA6bQwugAAqA/RK6KNLuGyFU4tNLoEwDSYwQEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZjaMD58ccf9cADDygkJERXX321Jk2apMrKSklSTk6OevXqJavV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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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WlNTo9LSUpWVlamxsVEJCQkqLCyU3+8P814BiHV8DRMARLC33npLHo9HL730kux2uyTp0Ucf1YIFC7Rr1y5df/31evLJJ2WxWAIzoNXV1dq0aZN27NihkpISlZSUSJJ2796t1NRU1dfXa86cOeHcLQAxjhlQAIhgt99+u06dOhUIn5IUFxcnt9utY8eOqbCwUBaLJdBXUFCghoYG+Xw+HT9+XEVFRYG+8ePHKzc3Vw0NDUb3AQA+iwAKABEuLi74rXrbtm2aP3++2tvblZGREdSXmZmptrY2dXZ2yu1299sPAOHER/AAECX8fr82bNigV155RY2Njfr617+upKSkoGVsNptcLpfcbrck9dl//vz5PtfvdrsDz5Oknp4eSZLX65XX6w3djkSBK/sbzfttHROea32tcf6gP4cjmsd/KEbDcTfQ2gmgABAFXC6XVq1apcbGRjmdTmVlZclms8nj8fRazmazyWazSVK//X2prKxURUVFr/YjR44EXQIQS5xOZ7hLGLKqmeHd/pZbfMNex+HDh0NQSfSJ5uPu0qVLA1qOAAoAEc7lcik/P19dXV1qamqSw+GQJE2ZMkUtLS1By7a2tsrhcCg5OVl2u10tLS2aOHFiUP/cuXP73E55ebnWr18feNzT06O0tDTl5eUpMTEx9DsWwbxer5xOpxYtWqT4+PhwlzMk2ZvrwrJda5xfW27xadObcXL7LJ//hKt4Z/PXQlRVdBgNx92VT04+DwEUACLcAw88oO7ubr3++utBH6nn5uaqtrZWDz30UKCtrq5Oc+bMkcViUU5Ojmpra3XrrbdKki5evKj6+nqVlpb2uR2r1Sqr1dqrPT4+PmpPhsMVzfvuvjy88Dfs7fssw64hWsd+uKL5uBto3QRQAIhgtbW12rt3rw4cOKDu7m51d3cH+u6991498sgj2rJli775zW9q3759amxsVHV1tSRp3bp1WrFihbKysjRt2jRVVFQoPT293xlQADCFAAoAEaympkZer1f5+fm9+k6fPq1Dhw7p+9//vrZu3aqpU6dq3759Sk9PlyQtXrxYVVVV2rhxozo6OpSTk6P9+/f3+q16IFJllB0a0fW3bFs8outH/wigABDBqqurAzOafcnIyFBzc3O//cXFxSouLh6J0gBgyPhvMAAAAIwigAIAAMAoAigAAACMIoACAADAKAIoAAAAjCKA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AKMIoH148803NXbsWL3zzjvhLiXinDp1SosXL9a1116rlJQUrV69OnCb1FjT2dmpe+65R9dcc40mTZqkTZs2cdvHPpw9e1bLly9XcnKyJkyYoCVLlqi9vT3cZQEAwogA+hkej0f333+/Ll++HO5SIs6HH36o+fPn6+/+7u/061//Ws8//7yampr08MMPh7u0sLjvvvv07rvv6sCBA3r22We1c+dO/fznPw93WRHF4/EoLy9PXV1devnll3Xw4EGdO3dODz74YLhLAwCEkbE7IUWLLVu26Etf+hKzn3147bXXlJGRoeeee05xcZ/832XTpk2qqKgIc2Xm/fGPf9Thw4fV3Nysm266SZJUWVmprVu3at26dWGtLZK89dZb8ng8eumll2S32yVJjz76qBYsWCC/3z+s2+oCAKIXM6Cf0tzcrKeeekpPPPFEuEuJSEuWLNFvfvObQPiUpLi4OH388cdhrCo8jh07poyMjED4lKSCggL96U9/UkdHR/gKizC33367Tp06FQif0ifHjNvtls/nC2NlAIBwIoD+f16vV/fff7+qqqq4NehVfDp8er1e/fSnP9XChQvDWFF4tLe3KyMjI6gtJSVFCQkJamtrC09REerTx4wkbdu2TfPnz9eYMWPCVBEAINz4CP7/q6ys1OTJk3XfffeFu5So4PF4tGrVKr3//vv61a9+Fe5yjHO73UpKSurVbrPZ5HK5zBcUBfx+vzZs2KBXXnlFjY2N4S4HABBGBFBJb7/9tnbs2KHf/va34S4lKnR1damwsFB/+ctf9Oqrr2rSpEnhLsk4m80mj8fTq93lcslms4Whosjmcrm0atUqNTY2yul0KisrK9wlAQDCiAAq6eGHH9ZHH32k6667Lqh9xowZ+j//5/8oPT09TJVFns7OTs2dO1d///d/r8bGxj5nAWPBlClT1NLSEtR27tw5ffzxx3I4HOEpKkK5XC7l5+erq6tLTU1NjA8AgHvBS9KZM2d06dKloLasrCz96le/Un5+vuLj48NUWWTx+XyaP3++rFarDhw4IKvVGu6SwubPf/6zMjIy9Ic//CFwLeju3bu1adOmXsE01q1cuVJvv/22/uM//iNm/8MCAAjGDKg+mc3qS2ZmJuHzU/7t3/5NJ06ckNPp1Pvvvx/U99lfyBntHA6HioqKdO+99+pnP/uZuru7VVZWxlcwfUZtba327t2rAwcOqLu7W93d3YE+h8OhsWN5CwKAWMS7PwaspqZG58+f18yZM3v1xeJE+s6dO7VmzRrNmzdP48aN07e//W1t2LAh3GVFlJqaGnm9XuXn5/fqO336dMz9xwUA8Ak+ggcAAIBRfA8oAAAAjCKAAgAAwCgCKAAAAIwigAIAAMAoAigAAACMIoACAADAKAIoAAAAjCKAAgAAwCgCKAAAAIwigAIAAMAoAigAAACMIoACAADAqP8HAx4SdqG7eJ4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x800 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 直方图\n",
    "df7 = pd.DataFrame({'A': np.random.randn(1000) + 1,\n",
    "                    'B': np.random.randn(1000),\n",
    "                    'C': np.random.randn(1000) - 1})\n",
    "\n",
    "df7.plot.hist(alpha=0.5) #带透明度直方图\n",
    "\n",
    "df7.plot.hist(stacked = True)# 堆叠图\n",
    "\n",
    "df7.hist(figsize = (8,8)) # 子视图绘制"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8eaf0615-1a49-4f0a-b398-97fc2a9ef987",
   "metadata": {},
   "source": [
    "## 作业"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "id": "ca6989b3-c4bf-4df3-bbaa-ba4d6bc05b62",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df_boys = pd.read_excel('体测分数_男生_女生_处理.xlsx', sheet_name='男生')\n",
    "df_girls = pd.read_excel('体测分数_男生_女生_处理.xlsx', sheet_name='女生')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "833840b4-32bb-488a-929f-720052aa7ffa",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.1\n",
    "\n",
    "将一班男生的‘男1000米跑’成绩制成线性图\n",
    "\n",
    "hint：姓名一列数值后面跟的数字表示班级，需要使用正则表达式提取\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "id": "c41ccfaf-936a-4e8e-82b5-bfbb9a4b6d9d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>班级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>3.53</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>3.50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>3.48</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>3.55</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>4.01</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     男1000米跑  班级\n",
       "34      3.53   1\n",
       "60      3.50   1\n",
       "77      3.48   1\n",
       "176     3.55   1\n",
       "189     4.01   1"
      ]
     },
     "execution_count": 215,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import re\n",
    "\n",
    "def convert(x):\n",
    "    # return x[3:]\n",
    "    match = re.search(r'\\d+$', x)\n",
    "    if match:\n",
    "        return match.group()\n",
    "    else:\n",
    "        return '0'\n",
    "\n",
    "#添加班级列，int16 类型\n",
    "df_boys['班级'] = df_boys['姓名'].map(convert).astype(np.int16)\n",
    "\n",
    "cond = df_boys['班级'] == 1\n",
    "score_of_clz_1 = df_boys[cond][['男1000米跑', '班级']]\n",
    "score_of_clz_1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "id": "9c6be11e-6e80-42db-8a48-a7fc5b3a2513",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>男1000米跑</th>\n",
       "      <th>班级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34</td>\n",
       "      <td>3.53</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>60</td>\n",
       "      <td>3.50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>77</td>\n",
       "      <td>3.48</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>176</td>\n",
       "      <td>3.55</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>189</td>\n",
       "      <td>4.01</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   index  男1000米跑  班级\n",
       "0     34     3.53   1\n",
       "1     60     3.50   1\n",
       "2     77     3.48   1\n",
       "3    176     3.55   1\n",
       "4    189     4.01   1"
      ]
     },
     "execution_count": 216,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#重建索引。因为上边打印的数据行索引不连续\n",
    "score_of_clz_1 = score_of_clz_1.reset_index()\n",
    "score_of_clz_1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "id": "18c80547-4c91-4c3a-9920-2e283ed9b78d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'>\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 217,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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wqJAgAEKERERwT1FNt0c+eMdgAEKERERwXNIGzMoREREpBHKmHsNFMgCDFCIiIgIngEKMyhERESkEWKKLDMoREREpBntriFtWlgUCDBAISIiIriLZLUwRRZggEJERERwtxnziIeIiIg0QxzxsEiWiIiINKNVmYPCDAoRERFpgMMhKxmUdAYoREREpAUdfVbIzkXG0V8kW1VVhbS0NGzYsGHA50pKSiBJ0oCPH/3oRwCAjz/+eMDnDAZD4L8FERERBUwMaUtO1CPRoI3cRcBRwe23347Ozs5BP/f555/DZrMp/15fX4+FCxfitttuAwA0NDRg3Lhx+OSTT5T7SJIU6KUQERFRENxD2rSRPQECDFBefvlltLS0oLCwcNDPn3r7U089haVLl2LevHkAnAHKmDFjUFJSEsiPJyIiIhW19WqrxRgIIECpra1FWVkZPv74Y1x55ZUj3r+xsREvvvgidu7cqdzW0NCAvLw8f380ERERhYDWNhkDAdSg3HHHHbj77rtRWlrq0/1fffVVzJkzx+v+DQ0NqK2txdy5c5GVlYVzzz0XO3bs8PdSiIiISAWiBkUrHTyAnxmU1157DdXV1fjHP/7h89esXr0aP//5z71ua2hoQEtLC37/+98jOzsbL7zwAq688kocO3YMKSkpg34fi8UCi8Wi/HtHR4c/l05ERERDEFNktTIDBfAjQDlx4gQefPBBbNy4EQkJvv0C+/btQ0VFBS6//HKv259//nkkJSUhJycHAHDGGWdgw4YN+Oyzz3DZZZcN+r1WrVqFX/3qV75eLhEREfmoXWN7eAA/jngef/xxNDU14dxzz4XJZILJZEJlZSWWLVuGzz77bNCv2bRpE84880xkZWV53W42m5XgBAAMBgPGjh2L+vr6IX9+WVkZ2tvblY/q6mpfL52IiIiGobU9PIAfGZSysjLcddddXrddeOGFWLlyJc4888xBv+bDDz/EwoULvW5ra2tDUVERPv30U8yfPx+A8/jmu+++Q35+/pA/32g0wmg0+nq5RERE5KM2je3hAfzIoOTn52Pq1KleHwkJCSgsLMT777+PqVOn4rnnnvP6ml27dg0ops3IyMCKFStw66234uOPP8aOHTtwww03QK/XY8GCBer8VkREROSzNo3t4QFUGnXf3t6OiooKNDU1KbfV1NSgubkZM2fOHHD/P/7xj1i8eDFW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6elBRUWFckTz9ttv4+uvv8b48eMxbtw45eP6668HAPzxj3/E4sWLsWLFClx88cVobm7Ghg0bkJqaqv5vSURERFEl6CLZSPG1yIaIiIi0IyRFskREREThwACFiIiINIcBChEREWmOX7t4tESUznDkPRERUfQQf7dHKoGN2gCls7MTADjynoiIKAp1dnYiPT19yM9HbRePw+FAXV0dUlNTvYbABUuM0K+urmZ3kAsfE298PLzx8RiIj4k3Ph7e4v3xkGUZnZ2dKCgo8FoqfKqozaDodDoUFhaG7PtznP5AfEy88fHwxsdjID4m3vh4eIvnx2O4zInAIlkiIiLSHAYoREREpDkMUE5hNBrx6KOPwmg0RvpSNIOPiTc+Ht74eAzEx8QbHw9vfDx8E7VFskRERBS7mEEhIiIizWGAQkRERJrDAIWIiIg0hwGKh6amJixfvhzJycnIzc3FypUrRxzFG8tWrlwJSZK8Pi666KJIX1ZEyLKMuXPn4rnnnlNu+/DDDzFz5kyYTCbMmjULn376aQSvMLwGezyKiooGPF/eeOONCF5l6NXV1eH6669HZmYmsrKycM0116C2thZA/D4/hntM4vE5Ul5ejgsvvBCpqanIysrCtddei8bGRgDArl278L3vfQ8mkwmTJ0/GW2+9FeGr1RYGKB5uvvlmHDx4EOvXr8err76KF198Ec8880ykLytiGhoacMMNN+DYsWPKx5tvvhnpywo7u92Ou+++Gzt37lRuq6ysxFVXXYVzzz0XO3fuxNKlS/H9739feSGOZYM9HgBw8uRJrFmzxuv5snTp0ghdZej19/fj4osvRktLC9577z1s2LABJ0+exJ133hm3z4/hHhMg/p4jnZ2dWLx4MYqKirB161asX78elZWV+OUvf4nOzk5cdtllGDNmDLZu3Yr7778fN910E77++utIX7Z2yCTLsix/++23MgB59+7dym2rV6+Wx48fH7mLirDvf//78iOPPBLpy4ionTt3ynPnzpVLSkrkcePGyX/4wx9kWZblRx55RJ49e7bscDiU+y5cuFB+7LHHInWpYTHU49HS0iIDkL/99tsIX2H4bNu2TZ40aZLc3d2t3LZ9+3Y5KSkpbp8fwz0m8fgcOXz4sHz33XfLNptNue3pp5+WFy5cKL/00ktybm6u3Nvbq3zuhz/8oXzbbbdF4lI1iRkUlx07dqCkpASzZ89WbluyZAm+++47NDQ0RO7CIqihoQF5eXmRvoyIevrpp3H22Wdj9+7dKC4uVm7fsWMHrr76aq89UEuWLMG2bdsicZlhM9TjIf4fiafnyznnnINDhw4hKSlJuU2n08FiscTt82O4x6Surg5AfD1HJk2ahOeeew56vR6yLKO8vBwvvPACrrnmGuzYsQNLliyByWRS7h8PzxF/MEBxqa2tRUlJiddteXl5MJlMqK6ujsxFRVhDQwM++ugjTJ48GXl5eVi+fLnyIhMvXn31VTzzzDPIyMjwun2w58u4ceNi/rky1OPR0NCAhIQE3H333cjNzcWUKVPwn//5nzFfw3XqorPf/va3WLRoUdw+P4ChH5Ompqa4fI4AwPr162E0GjFr1iyUlpbi3nvvjevniK8YoLhYLJYBL7oAYDab0dvbG/4L0oCGhgZYrVa88sor+Mtf/oLa2lrcdtttkb6ssEpISBj09sGeL/HwXBnq8RAZlBkzZuC9997Dz3/+c/zmN7/B3/72t3BeXsTIsowHHngAn3zyCZ599tm4fX54OvUxiefnyKJFi7B7926sWbMG5eXlWLlyJZ8jPojabcZqM5vN6O/vH3B7b28vzGZzBK4o8rZu3YqZM2cqf5RefPFFlJaWoru7G8nJyRG+usga7PkSz8+VJUuWYO/evZg2bRoA4PTTT8eBAwewdu1aXH/99RG+utDq7e3FTTfdhO3bt+PDDz/EtGnT4v75MdhjUlhYGLfPkZSUFMyYMQMzZsxAcXExFixYgHPOOSeunyO+YAbFpbi4GMePH/e67eTJk+jr60NhYWFkLirCCgoKvN4xT5gwAQBw4sSJSF2SZgz2fKmsrIzb50piYiIKCgq8bpswYQLq6+sjdEXh0dvbi0svvRQVFRXYuXMnzjrrLADx/fwY6jGJx+fI1q1b8dJLL3ndNmPGDPT19cFoNMbtc8RXDFBc5s2bh4qKCq8nzPvvv4+xY8fGVVGX8O6772Lq1Kno6upSbjtw4ACA+CpyG8r8+fOxadMmr9vef/99zJ07N0JXFFk33ngjHnzwQa/bDhw4gPz8/AhdUXjcfvvtaGtrwz//+U+vPyzx/PwY6jGJx+fIsWPHsHLlSq9jmyNHjkCSJNx444344IMP4HA4lM/Fy3PEZxHtIdKY5cuXywsWLJC/+uor+aOPPpILCgrk3/3ud5G+rIiwWCzylClT5Msvv1zetWuXvHHjRnnGjBnykiVLIn1pEXPeeecpbbV1dXVyamqq/Nhjj8kHDx6UH3/8cdlsNsvHjx+P8FWGj+fj8cknn8gGg0F++umn5fLycvnJJ5+UjUaj/Le//S3CVxk6GzdulBMSEuT33ntPPnbsmNdHVVVVXD4/hntMPvjgg7h7jnR1dcnjx4+Xr7nmGnn37t3y5s2b5bPPPlu+8sor5Z6eHrmoqEj+yU9+Ih84cEB+6aWX5MTERHnHjh2RvmzNYIDiobW1Vf6Xf/kXOSUlRR49erT8b//2b7Ldbo/0ZUXM0aNH5SuuuEJOT0+Xc3Jy5Ouvv16ur6+P9GVFjOcfZFmW5c8++0yePXu2nJiYKE+bNk1+7733Inh14Xfq4/HXv/5Vnj59umw2m+VJkybJTz75ZASvLvRuvfVWGcCgH8eOHYvL58dIj0m8PUdkWZYrKirkSy65RE5NTZXz8/Plm2++WW5sbJRlWZb37dsnn3vuubLRaJRLSkrk1157LcJXqy2SLMdBjxcRERFFFdagEBERkeYwQCEiIiLNYYBCREREmsMAhYiIiDSHAQoRERFpDgMUIiIi0hwGKERERKQ5DFCIiIhIcxigEBERkeYwQCEiIiLNYYBCREREmsMAhYiIiDTn/wcmkoWSyZnHqAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#取出成绩一列进行绘图\n",
    "score_of_clz_1 = score_of_clz_1['男1000米跑']\n",
    "print(type(score_of_clz_1))\n",
    "score_of_clz_1.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ba33873-ac0f-4bea-bfac-0bd936663c84",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.2\n",
    "\n",
    "对各项体侧指标进行分箱操作：不及格（0\\~59）、及格（60\\~69）、中等(70\\~79)、良好(80\\~89)、优秀(90\\~100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "id": "ac483eaa-65bb-4ce3-a115-e150ecccafe7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "男1000米跑分数\n",
       "中等     422\n",
       "良好     241\n",
       "及格     174\n",
       "不及格    134\n",
       "优秀      59\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "男50米跑分数\n",
       "中等     691\n",
       "及格     182\n",
       "良好      88\n",
       "不及格     55\n",
       "优秀      39\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "男跳远分数\n",
       "及格     437\n",
       "中等     365\n",
       "良好     108\n",
       "不及格    107\n",
       "优秀      38\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "男体前屈分数\n",
       "中等     449\n",
       "及格     227\n",
       "良好     224\n",
       "优秀     100\n",
       "不及格     52\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "男引体分数\n",
       "不及格    359\n",
       "及格     297\n",
       "中等     217\n",
       "良好      92\n",
       "优秀      74\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "男肺活量分数\n",
       "良好     234\n",
       "中等     182\n",
       "优秀     138\n",
       "及格      69\n",
       "不及格     51\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    }
   ],
   "source": [
    "for col_name in df_boys.columns:\n",
    "    if not col_name.endswith('分数'):\n",
    "        continue\n",
    "    t = pd.cut(df_boys[col_name],\n",
    "           bins=[0, 60, 70, 80, 90, 100],\n",
    "           right=False,\n",
    "           labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "    display(t.value_counts())\n",
    "    print('---')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "id": "06df4900-8119-4e01-8259-42ef265b2d87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "女800米跑分数\n",
       "中等     410\n",
       "良好     316\n",
       "优秀     124\n",
       "不及格    108\n",
       "及格      83\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "女50米跑分数\n",
       "及格     624\n",
       "中等     253\n",
       "不及格    179\n",
       "良好      14\n",
       "优秀       4\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "女跳远分数\n",
       "及格     529\n",
       "中等     313\n",
       "良好     151\n",
       "不及格     55\n",
       "优秀      17\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "女体前屈分数\n",
       "中等     523\n",
       "良好     195\n",
       "优秀     154\n",
       "及格     133\n",
       "不及格     23\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "女仰卧分数\n",
       "中等     609\n",
       "良好     262\n",
       "及格     136\n",
       "不及格     34\n",
       "优秀      24\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "女肺活量分数\n",
       "中等     254\n",
       "良好     184\n",
       "及格     124\n",
       "优秀      84\n",
       "不及格     15\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---\n"
     ]
    }
   ],
   "source": [
    "for col_name in df_girls.columns:\n",
    "    if not col_name.endswith('分数'):\n",
    "        continue\n",
    "    t = pd.cut(df_girls[col_name],\n",
    "           bins=[0, 60, 70, 80, 90, 100],\n",
    "           right=False,\n",
    "           labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "    display(t.value_counts())\n",
    "    print('---')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4871710-d447-4959-b9e7-0a34bea6fe57",
   "metadata": {},
   "source": [
    "### No.3\n",
    "\n",
    "绘制全校男生1000米跑和男跳远的条形图（分箱操作后统计各个成绩水平数量）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "id": "f33a228f-c759-43b9-a20c-b60efe2693d8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "男1000米跑分数\n",
       "中等     422\n",
       "良好     241\n",
       "及格     174\n",
       "不及格    134\n",
       "优秀      59\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "男跳远分数\n",
       "及格     437\n",
       "中等     365\n",
       "良好     108\n",
       "不及格    107\n",
       "优秀      38\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "boys_1000m_levels = pd.cut(df_boys['男1000米跑分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "boys_jump_levels = pd.cut(df_boys['男跳远分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "display(boys_1000m_levels.value_counts(), boys_jump_levels.value_counts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "id": "1a41189d-8120-4353-b081-99f4451f178b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 243,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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/1GHDh30wgsvqG7dupKkevXq6YknnlCbNm20e/fuQvhmro1AAgBAIdq9e7fS09OVlpamU6dO6Q9/+IOef/55paWluR5z585V1apVr2uC6LBhw/TRRx/p3Xff1cGDBzVy5EhlZmbqoYceknRxJGPs2LFau3at9u7dq/79+6tDhw6KiYlRRESEunfvrn79+mnPnj3asGGDxo4dq2HDhrnef82aNWrcuLFat26tESNGuO17zJgx6tWrl5o2bapHHnlEa9asKdwv678wqRUAcMu42ZVTi4plWcrIyFBycrK++uorzZo1S82bN9ekSZOUn5+vtLQ0BQYG6pNPPlHbtm2v6z0bNWqkJUuWaNy4cXr66ad15513avXq1Spbtqwk6amnnlJqaqr69++vjIwMtW/fXvPmzXO9ft68eRo2bJjatGkjPz8/DRw4UM8995wk6YMPPtCf/vQnjR07VpMnT3a9xul0yul0Srp46W9sbKz++te/qnr16oX1VV3GZv3WYvvFREZGhkJCQpSenq7g4GDT5aCk4LJfoNjJycnR0aNHVb16dY/OWfCE3NxcdevWTT/99JM6dOigxx57TE2bNnX1//GPf9SWLVvUoEEDzZ8/3219EFNOnjyp8PBw1/NLv283bNige++997re41rH7Hp/fzNCAgBAIfHz89MXX3whL68rz4hYvXr1NS/xNeG/w4gkBQcHKzs7W35+fkVaB4EEAIBCdLUwIl17vZHixMTIFJNaAQCAcQQSAABgHKdsAPymmLGrPb6P4n71BADPYoQEAAAYRyABAADGEUgAAIBxBBIAAArZhQsX9Fvrjubk5Fz3+90ia5j+LkxqBQDcOopidWW3/d3cSsvt2rVTYmLiNbeJjo523fQuNzdXPj4+8vLyUm5urmw2m3x9fTVp0iRduHBBv/76qypXruy2vLskff311/r888/12muvSZJOnTqlMmXKuK134nA45OPjozJlytzUZykqjJAAAFDI/P39tWTJEuXl5SkvL08zZ85Uv379XM+/+uort8XH5s6dq3LlyikiIkLlypXTxo0bJcm1WqrNZlNwcLByc3Pd9hMYGKipU6dqz549kqQ6deqoWrVqqlKlitvjk08+KaJPfvMIJAAAeICXl5d8fHxcIx82m8313Nvb221bPz8/jR49WidOnFDPnj21evVqPf/88/L395e3t7ec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iXrppZdkWZZat26tNm3ayMfHR23btjVdZqnSunVrffjhh+rcubMkKSgoSNLFMB8QEGCytFKlTJkymjhxou6//35t3LhRkpSYmKiNGze6Hps2bVJ6errhSkuuqKgoZWdnS7q4XPy6det08uRJlS9fXlu2bJG/v7/279+v5s2b66WXXjJcref4mC6gJHrzzTdVq1YtSRdPDxQUFCgkJETh4eFu29lsNhPllSrPPfecGjVqJEnav3+/Dhw4oLCwMNntdrOFlVI//PCDK2x069ZN7dq1U5kyZeTr6yuHw6HGjRvr/Pnzaty4sXx8fNS7d289++yzhqsu2Ww2m/r27av09HTXv8hHjhwpb29v1zYnT55U8+bNXYEFhatevXrauXOnpIun9wcPHqyVK1dq1qxZ+vDDD+VwOFS9enW1adNGu3btkmVZJfP3h4VCFx0dbZUtW9YKCQmxGjZsaK1atcr64IMPrL///e9WaGioa7ugoCCDVZYOTZo0sXx8fCy73W61bt3a+uabb6yVK1dab775phUSEmJlZGRYaWlpVlBQkJWammq63BJvxowZVqVKlSx/f39XW7ly5SzLsqzy5ctbmzdvtsqWLWtt3rzZmjlzptufF3jGpe//EpvNZqWkpLi1jRkzhr+vPGjRokVW7dq1raVLl1p+fn7W6NGjraVLl1pxcXHWxo0brcTERCs/P986evSo5XQ6TZfrMZyy8YAjR45oxYoVio2NVdmyZRUVFaVevXpp/vz5ysjIUPny5VW+fHmdP39eZcuWNV1uibZz50798MMP6t+/v06dOqWUlBR17txZ//jHP5SZmanQ0FDXsahUqZLpcku8Z555RosWLVKNGjXUt29frVmzRgUFBdq/f79sNptat24tHx8ftW7dWq1atWKOVRHIzc29rC0/P9/teVxcnH788ceiKqnUiYyM1NGjRzV79mwVFBRo69atmj17tn744QdlZGSoSZMm8vb2VkxMTMkcGfk/BBIP8PLyUrt27fT5558rLi5OAwcOlGVZqly5smbPnq1vvvlGe/fu1dGjR7Vr1y7T5ZZ4tWrV0syZM9WzZ0/97W9/U1pamqKiovTJJ5+ooKBABQUFcjqdOn/+vOlSS4W4uDjVrl1bNWvW1ODBg3XhwgV17dpVOTk5bts1atRICxYsMFRl6eBwONSkSRNXKLl0DDIyMlzbzJ49W5GRkapWrZqRGkuDChUqyM/PT1u3bpW/v7/Kly+v9evXq1OnTnrwwQdVrlw5Pfvss8rKyjJdqkfZLKuEX0dkUF5enipWrKiUlBS1aNFCgwYN0sCBA+Xv72+6tFKnoKBAFSpU0OnTp9WoUSNNnDhRPXv2NF1WqVW5cmUdOHBAlmWpbt26OnfunCpVqqQzZ86oXLlyWrt2rT788EPNmDHDdKmlwtmzZxUdHa26deuqbt26at++vdq3b6+ffvpJHTt21Lp163TPPfeYLrPE+s9//qOIiAg5HA5VrFhRkydP1vbt21W2bFn16NFDfn5+Gj58uCpXrqwNGzbIy6tkjiUwqdUDHnnkEdWqVcs1UW/69Olq0KCBUlNT9dprr7ltm5ubqylTphiqtORr0qSJateuLV9fX2VlZWnIkCGqW7euEhISlJCQ4LZtXl6eFi1aZKjS0uGXX37RkSNHlJ2drfDw8Kt+36NGjVKbNm2KtrhS6Ndff1W5cuUUEBCgrKwsTZ48WQcOHNCnn36qp59+WpZlafDgwYQRDwsMDJR0cVE6m82m4cOHa82aNbLb7apXr56io6O1detW1apVS3PnztVTTz1luGLPIJAUsry8PFWvXl2+vr6SLi4CtWLFCqWmpqpChQpu1/dblsV6Cx6Un5+vP/3pT64rapYuXapff/1V33zzjfr06aO6deu6FhqyLOuKK7qicK1du1ZjxoyRt7e3Tp06pbCwMA0dOvSy7T777DNVqFDBQIWlS61atXTHHXforrvuks1mU/369dWxY0dJ0gsvvKCNGzdq4cKFql27tp588knD1ZZcAQEBqlixovLy8pSZmSlJmjp1qjp37qx58+ZJksLCwvTkk09q9uzZJTaQcJWNBxUUFFghISGWZVlWQkKC1ahRI+upp56yTpw4YbawUig/P991LA4cOGC1adPGuv/++61//etfZgsrZQoKCqyZM2dagYGB1t/+9jfLsiyrTZs2Vk5OjlWhQgXLsi5efVZQUGCyzFLB6XRaq1evthYsWGCNGzfOstlsVv369a3bbrvNGjRokFWxYkXrxIkT1u7du62goCBr48aNpksu0fLz863s7GzLZrNZFy5csCzLslq0aOH2d9TKlSutt956y1SJHsccEg9yOBx6/fXXXfcjyM7O1pAhQ9SuXTs99thjhqsrXfLy8vSPf/zD9b1blqUJEyaoVatWiouLU3p6OqtTFqHdu3erQ4cO+uijj3TfffdJkvz8/JSVlaW4uDglJCS4hrHheb/++qvCwsKUnZ2t1NRUffrpp/Lz89PgwYMlSePGjdN3332nL774wnClJd+FCxdUpkwZSRfX7alfv74kKSsrS+np6apatarJ8jyKQGJQfn6+fHw4a1YcPPHEEwoPD9ekSZNMl1JqbNy4UY0bN1ZoaKgKCgq0cOFC9e/fnz8TBpw/f15LlizRgAED5Ofnd1n/yZMnFRAQoPLlyxuorvTIyMhQuXLldOjQId12221ufS+//LLi4+M1atSoy+YilhQlc6ruLeK5557T22+/bbqMUiMrK0sTJ07U0aNHL+vbtWsXS2MXIcuyVLt2bXl5eSk/P182m02PP/64HA4Hd2E2oGzZsho8ePAVw4gkpaWlafv27UVcVekybdo0LVq0yHU/m/81btw4TZ06VXPnzjVQXdEgkHhYdna23n///SuucZGYmKhvvvnGQFWlQ2pqqp588kl9++23ki7eI2LixImqX7++evTo4VroKTk5WQcOHOC+QkXowoULioqKUrly5eTv7y9fX1/5+fkpODhYf/jDH0yXB0lbtmzRgQMHJEmHDx9W165dderUKcNVlUwzZ87UtGnTVKNGDdnt9isGErvdrk6dOpXoyfecsilk586d09y5czVo0CBVrFhR+fn58vPzU9myZfXEE09o3Lhxqlixon755ReFh4drw4YNatWqlemySySHw+H6w92oUSMNHTpUAwYM0N69e7VmzRq9/vrrevrpp5WWlqbvv/9ea9asMV1yqXHpz8WmTZvc2u677z5t3bpVzZs3N1hd6XLu3Dl17txZ5cqVk7e3tyzL0oULF+Tv76+YmBi98847evnll/Xxxx/r4MGDpsstkU6cOKHs7GzVqlVLwcHB+ve//63Jkydr7969bqNW586d04ULF3T48GGD1XoOgaSQZWdnq0yZMvLz81OPHj00ZMgQtWnTRmvWrNFnn32m5cuX6/XXX9fx48e1atUqJSYmmi65xLIsS97e3jpw4IC++uorzZo1S0ePHlVycrLCw8N19OhRtWnTRr/88ou+++471axZ03TJpYq3t7fbZe8FBQXy8/PjUvgilpWVpbCwMM2dO1cjR47UjBkzNGLECO3fv19NmjTRrl271K1bNz3yyCP685//bLrcEqlp06aqWbOmwsLCNG/ePL322ms6fvy4KleurJiYGNfyBP7+/mratGmJndhKIClkl34JbtiwQatWrdKCBQuUmZnp+iW4c+dO9ejRQ+np6dqyZYvuvvtu0yWXaF5eXjpx4oTCw8PldDq1bNkydezYUZmZmXr22We1bds2+fj4aO7cubr//vtNl1uqEEiKj+DgYGVkZCg8PFwnT55UuXLl9Ouvv2rmzJlasmSJTpw4oZ9++ol7b3mA0+nUpEmTZLPZlJOTozfeeEMtW7ZUUlKSkpKS1KhRIz300EMaNmyYgoKCTJfrUUxnL2SXbnxUp04dtW3bVuPHj9fcuXNdKyEuX75cWVlZCgwMvOwGVvCMS8fEy8tL5cqVU9++fbVhwwY99thj2r9/v9atW6fBgwfr0KFDXGpaBAYPHqwqVapIkttVTU6n060tPz9fGRkZLB/vQUlJSdecrFqlShV9++23Wr16NWHEQ7y8vDRhwgTX8zlz5mjJkiWqXLmyMjMz9emnn2r+/PmaMWOGpk+frj59+pgr1sMIJB4WEhKijh07asKECfroo4909913a+fOnVq/fr0GDBig/fv3c5mjh7300kuqX7++brvtNi1dulT169fXW2+9pcjISElSr1699MILL2jx4sWsRulhBQUFSkpK0rlz5yTJ7Q6ylwZrL7UVFBSU+JuJmTZo0KArzgtxOBxq37699u7dq88++0zt2rUzUF3plJub67rJYVBQkPr376/+/fvr3Xff1cCBA3Xy5EmNHj3acJWewSkbD/Dy8tL48ePVoEED3XbbbZo+fbpyc3P1zDPPqFmzZpIu/k8XGRmpGTNmqHfv3oYrLrm8vLz0+OOPKy8vT8nJyTp48KByc3N1zz33qH///urevbt8fX01evRobdiwgaueitD/nrLJz8+Xv78/p2yK0JEjR1StWjVVrFjR7ZSNv7+/4uPjNXDgQH3wwQc6evSo3njjDdPllki5ubmKi4vT66+/rsaNG6t+/fpav369YmJiLtt23rx5On/+vJ599tmiL7QIEEg8wMvLS3FxccrJyVFycrL+85//qF69emrevLn69++vJk2aSJKGDx+uffv2adu2bYYrLrm8vb117NgxRUREuNqOHDmizz//XPPnz1dWVpbefvtt2Ww2FRQUMI+kCDGHpPi42hwSSTp27JgaNmyof/3rX6pdu7bhSkuekydPasCAAdq4caNuv/32ay4+l5eXp6ysLO3Zs6cIKyw6nCvwAJvNpoULF6patWqSLs5iT0xM1Oeff67OnTu77tgYFxenO+64w3C1JVdubq4sy3INf15So0YNjRw5Us8884zeffddPfTQQ3r66acVHx9vqNLS51r/Dro0xwpFw+FwyOFwaNKkScrMzNSkSZOUk5PjNr+nRo0aGj16tFauXGmw0pIpPDxca9euVUpKimbMmKF3331XTqdTzzzzjOrVq+e2bX5+/mV/n5UkjJAUsry8PPn7++vw4cNXvIz0woULmjJlimbMmKHXX39dw4YNM1Bl6ZCfn6/Vq1fr3nvvvebs9K1bt6p9+/ZKSEhQ69ati7DC0isnJ0eBgYGuCceXWJYlHx8f5ebmGqqs9Dl37pz69++vkJAQ113K/1d+fr6+/PJL7dy587IlzVG4Tp8+reeee07Lli3T5MmTNWbMGNMlFRkCSSHLzc3VO++8o759+yosLOyq23388cfq27ev1q1bpzZt2hRdgbiiDRs2KC4uznQZpUZ+fr42bdrkWrPHZrPJ6XQqJydHWVlZat++vekS8T8cDscVVxCFZyxdulR/+MMfVKNGDdOlFBkCiUGLFi3irr8AAIh72XjEjz/+qHvvvfeKN2tbs2aNOnbsKMuyCCMAAPwfAokH+Pj4aMuWLZcNb7799tvq0qWLMjMzXTPYAQAAgcQjAgIC3P4rXby19NNPP62//OUv+uc//3nNS7sAAChtuOzXA7y83HPehx9+qL/85S9avHgxi6ABAHAFTGr1gJSUFEVGRurIkSOKiYlRRkaG9u7dyyWlAABcBYHEAy4FErvdrs6dO6ty5cpX3C4vL0/Z2dlauHBh0RYIAEAxwxwSD7HZbNq5c6eOHz+ut956SwcOHFBmZqbb4/z580pLSzNdKgAAxjFC4gEpKSmKiopSQUGBLMvSpEmTNGfOHK1YsUItWrQwXR4AAMUOIyQeZrPZNH78eL355pvq0qWLNm/ebLokAACKHa6y8YAr3a20b9++yszMVLdu3fTPf/5Td955p4HKAAAonhgh8YDMzExJuuwGYUOHDtUjjzyiBx54QGfPnjVRGgAAxRKBxAPOnz8vLy8vVzD5b9OmTVNOTo6+/fZbA5UBAFA8ManVgO+//16333676TIAACg2CCQAAMA4TtkAAADjCCQAAMA4AgkAADCOQAIAAIwjkAAAAOMIJAAAwDgCCQAAMO7/A8eD/hn9L0xmAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = pd.DataFrame({\n",
    "    '男1000米': boys_1000m_levels.value_counts(),\n",
    "    '男跳远': boys_jump_levels.value_counts(),\n",
    "})\n",
    "data.plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88383bd9-2553-458f-8367-c0c6cb89d372",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "### No.4\n",
    "\n",
    "绘制全校女生50米跑和女仰卧的饼图（分箱操作后统计各个成绩水平的数量）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "id": "951345b8-0439-4e11-b80b-7dde254c6b2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "女50米跑分数\n",
       "及格     624\n",
       "中等     253\n",
       "不及格    179\n",
       "良好      14\n",
       "优秀       4\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "女仰卧分数\n",
       "中等     609\n",
       "良好     262\n",
       "及格     136\n",
       "不及格     34\n",
       "优秀      24\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "girls_50m_levels = pd.cut(df_girls['女50米跑分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "girls_getup_levels = pd.cut(df_girls['女仰卧分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "display(girls_50m_levels.value_counts(), girls_getup_levels.value_counts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "id": "ba32b4f1-c305-463a-adf6-698b26efc1b3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<Axes: ylabel='女仰卧'>, <Axes: ylabel='女50米'>], dtype=object)"
      ]
     },
     "execution_count": 260,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zTgcDg4ePGjglYmIiIiIiFQOKpYD4PHHH8fpdGKz2YiIiMDpdOJ0Ohk9ejQFBScuOfTWW2/RpUsXAP7973/To0cPNm7cyM6dO9m7dy8pKSm88cYb7N27l82bN+N0Og24IhERERERkcpFxXIAjBkzhtzcXCZOnEj79u3Jzc0lNzeXTZs2YbfbWbt2rf9Ym83G0qVLGTt2LGvWrKFnz540btyY9PR0UlJSsFgsxMXFkZKSQsOGDQkLU895ERERERGRQFOxHEBDhw5lw4YNLFy4kKlTp9KqVStSU1NPWDpq+PDhbNiwgTVr1uDz+di2bZuBiUVERERERAQ0wVfA7Nq1i+XLlzN37lz69etH48aN+eyzz0hPTz/l2JycHLZt28ZNN91Er169mDBhArfddlv5hxYREREREREghIrl+lu+NTrCWXG73SxbtowpU6Zwww03cOutt/L2228zaNAg+vXrR9++fWnevDl16tTB6XTy7LPPMn36dCZPnsyIESPo378/TqeT1atXs2bNGvbv36/Zr0VERERERMqZumGXIZfLxcqVK6lRowaffvopzzzzDAA9evRg69atXHnllSxatIh+/fqxfft27HY7GzduZOnSpf71ltu1a0fDhg1p2LAhzz33HG3btiUrK8vAqxIREREREal8TL7frmUUBFwuFzt37iQjIwO73W50nHO2detW6tat+7vH/PDDD1SvXr2cEp1ZqL/WIiIiIiIigaKW5TL2R4UyEBSFsoiIiIiIiJyZimURERERERGRk6hYFhERERERETmJimURERERERGRk6hYFhERERERETmJimURERERERGRk6hYLmP79++nqKjI/9jj8RiYRkRERERERM5HmNEBKpobbriBo0eP8vHHHwPwyCOPsGrVKt58802WLFnC7bfffsLxLpcLl8tFYWEhhw4d4pdffmHv3r3s2bOHb7/9lj179rBs2TLi4uIMuBoREREREZHKKWSK5RnD15Tr+UY+3/Wcv2f//v188MEHrFu3zr/PZDKRmZnJsWPHmDBhAkVFRdx7770AuN1u0tLSyMnJASAiIoKSkhLS09OpV68eVapUoVGjRnzzzTe0b9++bC5MRERERERE/lDIFMuh4JlnnqFBgwa0aNHCv8/lcpGQkMAFF1zA3Llz2bFjB3l5ecTGxlJSUsIXX3yB1WolLi4Om81G+/btGTVqFFdddZX/OTweD8XFxdhsNiMuS0REREREpNIx+Xw+n9EhfsvlcrFz504yMjKw2+3+/cHesvzTTz9Rt25dsrKy2LdvH3v27MFms1FcXAzgL3RdLhcej4f8/Hyio6Mxm81ER0cDUFxcTFFRERaLBZvNRlhYGEVFRbhcLv7+97/z6KOPluk1num1FhERERERqezUslxG7rrrLv9kXu+++y4mkwm73c61115L3759+etf/wpAUVERRUVFREZGkp+fT2RkJCaTienTp7Ny5UoOHTpEhw4dWLx4MS+88ALZ2dm43W6C7J6GiIiIiIhIhabZsMvAwoULWbRoEbfddhsAmZmZZGRkUK1aNXbt2sWePXt49NFHqVq1KmlpadStWxeTyURUVBTffvstffr04eOPP2bJkiVYrVZatGjB8uXLufXWW+ncuTMzZ87k008/xev1GnylIiIiIiIilYOK5TLQsmVLxo8fT4MGDU7Yf+TIEXbt2kVycjJffvnlCV87PmlX7969SUpKIioqitGjR/P9998za9Yspk2bxoMPPkj//v156aWXWLFiBWaz/rlERERERETKg7phl4FatWoxZswY5s+ff8L+JUuW0KRJE9LT00+ZnKthw4Y89dRTNG/enL1797Jlyxb69u3L4sWLcTqd9OnTh2uvvZarr76aW265BYvFUp6XJCIiIiIiUqmpqTKAZs+ezYABA8749datWxMWFkZGRgbh4eFERkZy6aWX4nA4cLlc9OrVC4vFwty5c8sxtYiIiIiIiKhYDpBZs2axdetWRo4cecL+wsJCxo0bx9GjR/37Dh48yMiRI7n++uuxWCy0aNGC/Px8Pv/8c3w+H82aNSvv+CIiIiIiIpWaumGXIbfbjdvtZtasWYwePZoXX3yR2NhYwsPDOXz4MN999x0rV65k4sSJDB8+nA8++IBPPvmEF154gUaNGjFx4kQA9u7dy9KlS/nwww+Ji4ujcePGBl+ZiIiIiIhI5RIyxfK5rntsBJfLRUFBAfn5+TzyyCMMGjQIKO1uffToURo1akR4eDh33HEHNWrUYOnSpfzjH//gkUceYcSIEYSFlf5zpKWlMWnSJGw2G08//bTGK4uIiIiIiJQzky/IFvB1uVzs3LmTjIwM7Ha70XEM4/F4Al4k67UWERERERE5PY1ZDlJqTRYRERERETGOimURERERERGRk6hYFhERERERETlJ0BbLQTaUukLSaywiIiIiInJ6QVcsHx+rW1xcbHCSiq+wsBAAq9VqcBIREREREZHgEnRLR4WFheFwOPj555+xWq2YzUFXz4c8n89HYWEhOTk5OJ1OTSYmIiIiIiJykqBbOgpKW5V37tyJ1+s1OkqF5nQ6qVq1KiaTyegoIiIiIiIiQSUoi2UAr9errtgBZLVa1aIsIiIiIiJyBkFbLIuIiIiIiIgYRQOCRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJCqWRURERERERE6iYllERERERETkJP8PXZeP2OaKM2EAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame({\n",
    "    '女仰卧': girls_getup_levels.value_counts(),\n",
    "    '女50米': girls_50m_levels.value_counts()\n",
    "}).plot.pie(subplots = True, figsize=(12, 6))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43572bc6-2db3-41cb-80b4-a4deea5588d0",
   "metadata": {},
   "source": [
    "### No.5\n",
    "\n",
    "绘制男跳远、女跳远的堆叠条形图（分箱操作后统计各个成绩水平的数量）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "id": "951a1200-3380-47eb-ad11-f3ffcbfdb355",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "男跳远分数\n",
       "及格     437\n",
       "中等     365\n",
       "良好     108\n",
       "不及格    107\n",
       "优秀      38\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "女跳远分数\n",
       "及格     529\n",
       "中等     313\n",
       "良好     151\n",
       "不及格     55\n",
       "优秀      17\n",
       "Name: count, dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "boys_jump_levels = pd.cut(df_boys['男跳远分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "girls_jump_levels = pd.cut(df_girls['女跳远分数'],\n",
    "       bins=[0, 60, 70, 80, 90, 100],\n",
    "       right=False,\n",
    "       labels=['不及格', '及格', '中等', '良好', '优秀'])\n",
    "\n",
    "display(boys_jump_levels.value_counts(), girls_jump_levels.value_counts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "id": "6eec273f-4072-480c-9919-7421cc413205",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 265,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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XcHj6empoUOH6tVXX5Wfn59q1Kih559/Xl26dNGTTz6pxYsXF1kPraQxwgIAgAt4eHjIy8tLXl5eztGWK4//e6Kpj4+PRo4cqZMnT6pnz55atWqVXnzxRfn6+srT01MOh0Oenp565JFH9Prrrzuf16RJEzVt2lQ//PCDJCk9PV2ZmZlKT093brm5uVcNK3l5eRoyZIgGDRqkqKgoSVLTpk318MMPKy4uToWFhUX6Z2ZmasyYMapQoYIsFosMw1BoaKgefPBBJScnKy0tTeXKldPnn3+ujz76SImJia7+SotghAUAABfo37+/Bg4cKOnyaZ6CggJ99dVXkqSCgoLrLoYaGRmp119/Xa+88oozsJw/f16rV6/W6NGjJUlZWVny8fFRUlKSLBaLevbsqfz8fHl5Ff8pt9vtev7559WhQwdJl+egDBgwQJL05ptvFuk7bdo0NWzYUL169dLcuXMVEBAgSXrmmWf01VdfyeFwKD8/Xw899JAsFovmz5+v6dOnq1atWjp69Kg+/PBDeXt764knnihyI2NXY4QFAAAXmDt3rnOUY/LkyXrsscecj1euXFmkr4eHh9577z15eHjom2++0R133KHo6GilpaXJ09NThmFoyZIl6tChg1q0aCFJGjlypPz8/OTn56f9+/crPj5e//jHP3ThwgU1adJEd999t/7zn//otddeU0JCgu644w5Jl4PO448/rpUrV+rzzz8vtsZZcHCwVqxYofXr16tBgwaaPn26JGnhwoXatGmT2rRpo+joaI0fP159+/ZVenq6PvroI7300kuaNm2aGjRooMcff1xDhw4t0e+XEZY/YnyQuytwjfEZ7q4AAMoUu92uXr16qVevXkX2f/TRR87/rlatmvO/W7VqpaNHjyo0NNS5Cuy9996r8ePHy8vLSw6HQ4MGDdKgQYOcz0lISNDUqVNVvnx5BQQEqH79+pKknJwcNWrUSAUFBfLz8ysyuVeSRowYofXr12v+/Plq0qTJNT/DqlWrNHnyZBUUFEiSxo4dq6+//lqrVq3SU089pdq1a2vjxo2aOHGiDhw4oPfee099+vTRuXPn/tIKtr8XIywAAPxFX375pXJycpSfn6/c3FwdOHBAly5dUn5+vvLz82W327V//35n/969e+vYsWOSpMaNG2v48OGaOnWqpk+fLqvVKsMwNG7cOM2fP9/5nAoV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WbNGPXv21O7du9W5c2d16tRJK1euVI8ePdxdapnWtWtXffbZZ/Lw8JCvr688PDz05Zdfqn///rJYLOrfv7+aNm2qypUr65NPPnF3uSWKwOJGoaGh2rt3r3788UdNmDBBY8aMkWEYuuuuu9S+fXt5eXnp7rvvdneZN4277rpLn376qbp06SJJCggIkHT5L24/Pz93lnbTKVeunCZMmKBOnTppw4YNkqTt27drw4YNzm3jxo3KyMhwc6Vll8ViUWRkpHbt2qV//etfeumllzR27FhJUlxcnJ544gl5enqqX79+bq60bKtevbpyc3MlXV7Zdu3atTp16pQqVqyozZs3y9fXV99//71at26tMWPGuLnakmWqpflvFiNGjFDjxo0lSd9//70OHTqkkJAQWa1W9xZ2E/rxxx+dYaR79+7q0KGDypUrJ29vb9lsNjVt2lSXLl1S06ZN5eXlpV69eumFF15wc9Vln8ViUZ8+fZSRkeH8l+SwYcPk6enp7HPq1Cm1bt3aGWjgOu+8845q164t6fLp6sLCQgUFBSk0NLRIP4vF4o7ybir169fXjh07JF0+LTdgwAAtX75cM2bM0KeffiqbzaYaNWqoffv22rVrlwzDKLvHxUCpi46ONry8vAyr1Wrcddddxt69e43ly5cb77zzjhEUFGRkZmYa6enpRkBAgJGWlubucsu0adOmGVWqVDF8fX2d+ypUqGAYhmFUrFjR2LRpk1G+fHlj06ZNxvTp043g4GB3lXpTuXIMrrBYLEZqamqRfaNGjTICAgJKs6ybRkREhFG+fHkjKCjIaNSokbFixQrj448/Nv71r38V+TPA91/yFixYYNSpU8dYtGiR4ePjY4wcOdJYtGiRERMTY2zYsMHYvn27UVBQYBw7dsxwOBzuLrdEcUrIDXbs2KEff/xRcXFxOn36tFJTU9WlSxd9/vnnysrKUnBwsCpWrKhLly6pSpUq7i63TBs6dKgWLFig2267TX369NHq1atVWFio77//XhaLRXfddZe8vLx01113qV27dpyvLyV2u73YvoKCgiKPY2Ji9NNPP5VWSTeVo0ePatmyZWrVqpXKly+v6tWr69FHH9WcOXOUmZmpihUrOv+OKl++vLvLLdPCw8N17NgxvfvuuyosLNSWLVv07rvv6scff1RmZqaio6Pl6empyMjIsjuy8v8QWNykdu3amj59unr27KkPPvhA6enpql69ur744gsVFhaqsLBQDodDly5dcnepZV5MTIzq1KmjmjVrasCAAcrOzla3bt2Ul5dXpF/jxo01b948N1V587DZbIqOjnaGlivHITMz09nn3XffVXh4uKpVq+aWGss6Dw8PdejQQV9//bViYmLUv39/GYahW265Re+++6727t2rffv26dixY9q1a5e7yy3TKlWqJB8fH23ZskW+vr6qWLGi1q1bp86dO+uhhx5ShQoV9MILLygnJ8fdpZY47tbsRoWFhapUqZLOnDmjxo0ba8KECerZs6e7y7op3XLLLTp06JAMw1C9evV04cIFValSRWfPnlWFChW0Zs0affrpp5o2bZq7S71pnD9/XhEREapXr57q1aunjh07qmPHjvr3v/+t2NhYrV27Vi1btnR3mWVafn6+KleurNTUVLVp00ZPP/20+vfvL19fX3eXdtP49ddfFRYWJpvNpsqVK2vSpElKSkpS+fLl9eCDD8rHx0dDhgzRLbfcovXr18vDo+yOQzDp1g2io6NVp04deXt7KycnRwMHDlS9evWUmJioxMTEIn3z8/O1YMECN1Va9p07d05Hjx5Vbm6uQkNDr/ldDx8+XO3bty/d4m5SFy9eVIUKFeTn56ecnBxNmjRJhw4d0tKlS/Xcc8/JMAwNGDCAsFKC/v73v6t27drOyedTp07VHXfcobS0NL355ptF+trtdr322mtuqrTs8/f3l3R58USLxaIhQ4Zo9erVslqtql+/viIiIrRlyxbVrl1bs2bN0rPPPuvmiksOgaWUFRQU6Mknn3ReEbRo0SJdvHhRe/fuVe/evVWvXj3nAkCGYVx1RVy4zpo1azRq1Ch5enrq9OnTCgkJ0aBBg4r1++qrr1SpUiU3VHjzqV27tho0aKAmTZrIYrEoKipKsbGxkqSXX35ZGzZs0Pz581WnTh0988wzbq627MnPz1eNGjXk7e0t6fLfQ8uWLVNaWpoqVapUZD0cwzBYo6iE+fn5qXLlysrPz1dWVpYkafLkyerSpYtmz54tSQoJCdEzzzyjd999t0wHFq4ScqOCggIjKCjIMAzDOHTokNG+fXujU6dOxs6dO91b2E2ksLDQmD59uuHv72988MEHhmEYRvv27Y28vDyjUqVKhmFcvhKisLDQnWXeNBwOh7Fq1Spj3rx5Rnx8vGGxWIyo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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame({\n",
    "    '男跳远分数': boys_jump_levels.value_counts(),\n",
    "    '女跳远分数': girls_jump_levels.value_counts(),\n",
    "}).plot.bar(stacked = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0cbb9031-4bd8-45cb-9169-e9bb59c96860",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
